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标准库defaultdict模块使用示例
Apr 28 Python
详解Python函数作用域的LEGB顺序
May 14 Python
python获取代理IP的实例分享
May 07 Python
Python之文字转图片方法
May 10 Python
Python 脚本获取ES 存储容量的实例
Dec 27 Python
Python2.7实现多进程下开发多线程示例
May 31 Python
浅谈PySpark SQL 相关知识介绍
Jun 14 Python
pytorch如何冻结某层参数的实现
Jan 10 Python
python实现引用其他路径包里面的模块
Mar 09 Python
浅谈Python 函数式编程
Jun 20 Python
利用Python实现Json序列化库的方法步骤
Sep 09 Python
python中使用asyncio实现异步IO实例分析
Feb 26 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
全国FM电台频率大全 - 1 北京市
2020/03/11 无线电
PHP simple_html_dom.php+正则 采集文章代码
2009/12/24 PHP
php实现递归的三种基本方式
2020/07/04 PHP
php中注册器模式类用法实例分析
2015/11/03 PHP
PHP网页安全认证的实例详解
2017/09/28 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
2018/06/06 PHP
PHP中quotemeta()函数的用法讲解
2019/04/04 PHP
js 字符串转换成数字的三种方法
2013/03/23 Javascript
JavaScript 函数惰性载入的实现及其优点介绍
2013/08/12 Javascript
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
js 验证身份证信息有效性
2014/03/28 Javascript
js 获取input点选按钮的值的方法
2014/04/14 Javascript
js创建对象的区别示例介绍
2014/07/24 Javascript
简单方法判断JavaScript对象为null或者属性为空
2014/09/26 Javascript
JS经典正则表达式笔试题汇总
2016/12/15 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
微信小程序表单验证错误提示效果
2017/05/19 Javascript
React 条件渲染最佳实践小结(7种)
2020/09/27 Javascript
Python实现简单截取中文字符串的方法
2015/06/15 Python
Python单例模式实例详解
2017/03/01 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
Pytorch 中的optimizer使用说明
2021/03/03 Python
canvas学习总结三之绘制路径-线段
2019/01/31 HTML / CSS
英国最大的在线时尚眼镜店:Eyewearbrands
2019/03/12 全球购物
天逸系统(武汉)有限公司Java笔试题
2015/12/29 面试题
外贸主管求职简历的自我评价
2013/10/23 职场文书
《美丽的黄昏》教学反思
2014/02/28 职场文书
教堂婚礼主持词
2014/03/14 职场文书
音乐会主持人开场白
2015/05/28 职场文书
行政处罚决定书
2015/06/24 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python
Redis做数据持久化的解决方案及底层原理
2021/07/15 Redis
Python批量解压&压缩文件夹的示例代码
2022/04/04 Python