python 函数的缺省参数使用注意事项分析


Posted in Python onSeptember 17, 2019

本文实例讲述了python 函数的缺省参数使用注意事项。分享给大家供大家参考,具体如下:

python的函数支持4种形式的参数:分别是必选参数、 缺省参数、 可变长参数、关键字参数;而且参数的书写顺序也是又一定规定的,顺序如下

def fun(param, default_params, arbitrary_params, keyword_param)

下面针对缺省型参数分析一些注意事项

先定义这样子一个函数

def test_fun(a=[]):
   a.append('a')
   print a
if __name__ == '__main__':
  test_fun()
  test_fun()

按我们定义函数的意愿,觉得应该打印的结果是:

['a']
['a']

然而真实的结果是

['a']
['a', 'a']

为什么结果会叠加呢,问题出在缺省值上

但我们给一个函数定义一些缺省的参数时,在调用该函数的时候, 实际上是先定义了一个对象, 但是只有第一次调用的时候,才是定义, 而之后的调用, 都是指向同一个变量

所以在第一次调用test_fun()时, 定义了一个[], 而且这个[]在逻辑上是和这个函数绑定的, 而第二次调用test_fun时, 不再定义, 而是直接引用第一次定义的那个缺省对象,所以第二次打印的结果会叠加第一次的

为了避免这种不合乎我们原来意图的调用和实现,在构造缺省参数时, 我们最好构造一个不可变对象, ([]是可变对象), 以防止该缺省对象给表动而导致第二次调用时,缺省值不是我们的最初的值了

那现在再定义函数

def test_fun_1(a=[]):
   a.append('a')
   print a
def test_fun_2(a=[]):
  a.append('a')
  print a
if __name__ == '__main__':
  test_fun_1()
  test_fun_1()
  test_fun_2()
  test_fun_2()

结果会是:

['a']
['a', 'a']
['a']
['a', 'a']

为什么test_fun_1 和 test_fun_2的对象没有相互叠加呢, 因为缺省对象实际和函数是绑定的, 也就是test_fun_1的缺省值[] 和test_fun_2的缺省值[] 是两个不相干的对象

关于Python相关内容感兴趣的读者可查看本站专题:《Python函数使用技巧总结》、《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python将MongoDB里的ObjectId转换为时间戳的方法
Mar 13 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
Jun 07 Python
详解Python 定时框架 Apscheduler原理及安装过程
Jun 14 Python
pytorch 输出中间层特征的实例
Aug 17 Python
python二元表达式用法
Dec 04 Python
PyTorch 普通卷积和空洞卷积实例
Jan 07 Python
Python对Tornado请求与响应的数据处理
Feb 12 Python
Python3标准库之functools管理函数的工具详解
Feb 27 Python
MAC平台基于Python Appium环境搭建过程图解
Aug 13 Python
Python模拟键盘输入自动登录TGP
Nov 27 Python
Python 实现二叉查找树的示例代码
Dec 21 Python
Opencv实现二维直方图的计算及绘制
Jul 21 Python
Python 字符串、列表、元组的截取与切片操作示例
Sep 17 #Python
Python 实现大整数乘法算法的示例代码
Sep 17 #Python
Python对接 xray 和微信实现自动告警
Sep 17 #Python
Python计算两个矩形重合面积代码实例
Sep 16 #Python
详解Python3 pickle模块用法
Sep 16 #Python
python scipy卷积运算的实现方法
Sep 16 #Python
python 三元运算符使用解析
Sep 16 #Python
You might like
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
PHP内存缓存Memcached类实例
2014/12/08 PHP
php实现对象克隆的方法
2015/06/20 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
2019/10/21 PHP
JSON 入门指南 想了解json的朋友可以看下
2009/08/26 Javascript
NodeJS使用jQuery选择器操作DOM
2015/02/13 NodeJs
简易的投票系统以及js刷票思路和方法
2015/04/07 Javascript
Svg.js实例教程及使用手册详解(一)
2016/05/16 Javascript
javascript弹出带文字信息的提示框效果
2016/07/19 Javascript
vue-router实现组件间的跳转(参数传递)
2017/11/07 Javascript
微信小程序上传多图到服务器并获取返回的路径
2019/05/05 Javascript
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
跟老齐学Python之开始真正编程
2014/09/12 Python
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
Python图像处理之简单画板实现方法示例
2018/08/30 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
2018/10/16 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
2018/10/22 Python
Tensorflow 多线程与多进程数据加载实例
2020/02/05 Python
最新2019Pycharm安装教程 亲测
2020/02/28 Python
利用python 读写csv文件
2020/09/10 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
css3中transition属性详解
2014/09/02 HTML / CSS
HTML5响应式(自适应)网页设计的实现
2017/11/17 HTML / CSS
Topshop法国官网:英国快速时尚品牌
2018/04/08 全球购物
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
JAVA中运算符的分类及举例
2015/09/12 面试题
文秘自荐信
2013/10/20 职场文书
甜品蛋糕店创业计划书范文
2014/02/06 职场文书
模范教师事迹材料
2014/02/10 职场文书
应届毕业生自荐信例文
2014/02/26 职场文书
乐观自信演讲稿范文
2014/05/21 职场文书
党的群众路线教育实践活动宣传标语口号
2014/06/06 职场文书
Go语言编译原理之源码调试
2022/08/05 Golang