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之集合的关系
Sep 24 Python
为python设置socket代理的方法
Jan 14 Python
Python 26进制计算实现方法
May 28 Python
python数据清洗系列之字符串处理详解
Feb 12 Python
Python整型运算之布尔型、标准整型、长整型操作示例
Jul 21 Python
Python编程之string相关操作实例详解
Jul 22 Python
Gauss-Seidel迭代算法的Python实现详解
Jun 29 Python
django 信号调度机制详解
Jul 19 Python
用Python调用win命令行提高工作效率的实例
Aug 14 Python
解决python对齐错误的方法
Jul 16 Python
Python自动化xpath实现自动抢票抢货
Sep 19 Python
python实现经纬度采样的示例代码
Dec 10 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
php fckeditor 调用的函数
2009/06/21 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
阿里对象存储OSS在laravel框架中的使用方法
2019/10/13 PHP
js获得网页背景色和字体色的方法
2014/03/21 Javascript
Javascript中3个需要注意的运算符
2015/04/02 Javascript
JS实现slide文字框缩放伸展效果代码
2015/11/05 Javascript
js和jquery实现监听键盘事件示例代码
2020/06/24 Javascript
前端微信支付js代码
2016/07/25 Javascript
BootStrap实现轮播图效果(收藏)
2016/12/30 Javascript
jQuery插件版本冲突的处理方法分析
2017/01/16 Javascript
微信小程序 弹幕功能简单实例
2017/02/14 Javascript
Ionic2调用本地SQlite实例
2017/04/22 Javascript
[04:21]狐狸妈带你到现场 DOTA2 TI中国区预选赛线下赛路线指引
2014/05/22 DOTA
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
python操作gmail实例
2015/01/14 Python
Python中的字典与成员运算符初步探究
2015/10/13 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
Mac中Python 3环境下安装scrapy的方法教程
2017/10/26 Python
python list格式数据excel导出方法
2018/10/31 Python
python实现趣味图片字符化
2019/04/30 Python
使用Python快乐学数学Github万星神器Manim简介
2019/08/07 Python
Django实现列表页商品数据返回教程
2020/04/03 Python
jupyter notebook 的工作空间设置操作
2020/04/20 Python
解决python 虚拟环境删除包无法加载的问题
2020/07/13 Python
英国鲜花速递:Serenata Flowers
2018/04/03 全球购物
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
《猴子种树》教学反思
2014/02/14 职场文书
毕业生求职信
2014/06/10 职场文书
优秀教研组申报材料
2014/12/26 职场文书
总经理岗位职责
2015/02/04 职场文书
2015年推广普通话演讲稿
2015/03/20 职场文书
教你怎么用Python处理excel实现自动化办公
2021/04/30 Python
MySQL系列之七 MySQL存储引擎
2021/07/02 MySQL
css3带你实现3D转换效果
2022/02/24 HTML / CSS