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 相关文章推荐
Python3.4 tkinter,PIL图片转换
Jun 21 Python
tensorflow 加载部分变量的实例讲解
Jul 27 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
Django对models里的objects的使用详解
Aug 17 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
Python读取csv文件实例解析
Dec 30 Python
详解用Python进行时间序列预测的7种方法
Mar 13 Python
python实现交并比IOU教程
Apr 16 Python
Django全局启用登陆验证login_required的方法
Jun 02 Python
Python图像处理二值化方法实例汇总
Jul 24 Python
python中delattr删除对象方法的代码分析
Dec 15 Python
python爬虫scrapy框架之增量式爬虫的示例代码
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
谈谈新手如何学习PHP
2006/12/14 PHP
不重新编译PHP为php增加openssl模块的方法
2011/06/14 PHP
php4与php5的区别小结(配置异同)
2011/12/20 PHP
PHP flush()与ob_flush()的区别详解
2013/06/03 PHP
redis查看连接数及php模拟并发创建redis连接的方法
2016/12/15 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
PHP实现微信小程序用户授权的工具类示例
2019/03/05 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
laravel邮件发送的实现代码示例
2020/01/31 PHP
JavaScript脚本性能的优化方法
2007/02/02 Javascript
你必须知道的Javascript知识点之"this指针"的应用
2013/04/23 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
微信小程序 刷新上拉下拉不会断详细介绍
2017/05/11 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
小程序简单两栏瀑布流效果的实现
2019/12/18 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
python 解析html之BeautifulSoup
2009/07/07 Python
python判断windows隐藏文件的方法
2014/03/21 Python
磁盘垃圾文件清理器python代码实现
2020/08/24 Python
python设定并获取socket超时时间的方法
2019/01/12 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
2019/12/10 Python
python列表推导和生成器表达式知识点总结
2020/01/10 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
Java中compareTo和compare的区别
2016/04/12 面试题
天网面试题
2013/04/07 面试题
党员的自我评价范文
2014/01/02 职场文书
战友聚会邀请函
2014/01/18 职场文书
大学毕业寄语大全
2014/04/10 职场文书
幼儿园大班毕业评语
2014/12/31 职场文书
北京英文导游词
2015/02/12 职场文书
你对自己的信用报告有过了解吗?
2019/07/09 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL
Java SSH 秘钥连接mysql数据库的方法
2021/06/28 Java/Android