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编写爬虫小程序
May 14 Python
Python虚拟环境Virtualenv使用教程
May 18 Python
python检测是文件还是目录的方法
Jul 03 Python
Python黑魔法Descriptor描述符的实例解析
Jun 02 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
Mar 16 Python
django文档学习之applications使用详解
Jan 29 Python
python pandas 如何替换某列的一个值
Jun 09 Python
Python中矩阵创建和矩阵运算方法
Aug 04 Python
tensorflow实现在函数中用tf.Print输出中间值
Jan 21 Python
Python ini文件常用操作方法解析
Apr 26 Python
Django --Xadmin 判断登录者身份实例
Jul 03 Python
python3.7.3版本和django2.2.3版本是否可以兼容
Sep 01 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获取文件名后缀
2013/06/09 PHP
PHP图像识别技术原理与实现
2016/10/27 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
在父页面调用子页面的JS方法
2013/09/29 Javascript
网站内容禁止复制和粘贴、另存为的js代码
2014/02/26 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
2017/01/18 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
js中DOM事件绑定分析
2018/03/18 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
JavaScript判断数据类型有几种方法及区别介绍
2020/09/02 Javascript
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
HTML的form表单和django的form表单
2019/07/25 Python
python2爬取百度贴吧指定关键字和图片代码实例
2019/08/14 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
2020/04/13 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
如何利用python生成MD5并去重
2020/12/07 Python
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
加拿大著名的奢侈品购物网站:SSENSE(支持中文)
2020/06/25 全球购物
校园十佳歌手策划书
2014/01/22 职场文书
财务支持类个人的自我评价
2014/02/14 职场文书
感恩母亲节活动方案
2014/03/04 职场文书
教师师德师风自我剖析材料
2014/09/29 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
财产分割协议书
2016/03/22 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP
MySQL 数据类型详情
2021/11/11 MySQL
CSS font-variation 可变字体的魅力(实例详解)
2022/03/03 HTML / CSS
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android