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的subprocess模块总结
Nov 07 Python
Python heapq使用详解及实例代码
Jan 25 Python
django实现登录时候输入密码错误5次锁定用户十分钟
Nov 05 Python
Django使用HttpResponse返回图片并显示的方法
May 22 Python
Python深拷贝与浅拷贝用法实例分析
May 05 Python
Django Rest framework频率原理与限制
Jul 26 Python
使用Python将字符串转换为格式化的日期时间字符串
Sep 01 Python
Django实现WebSSH操作物理机或虚拟机的方法
Nov 06 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
Mar 04 Python
django正续或者倒序查库实例
May 19 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
Dec 15 Python
python如何构建mock接口服务
Jan 28 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中使用PDF文档功能
2006/10/09 PHP
PHP实现视频文件上传完整实例
2014/08/28 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
2018/01/29 PHP
php统计数组不同元素的个数的实例方法
2019/09/26 PHP
2010年最佳jQuery插件整理
2010/12/06 Javascript
JS 实现导航栏悬停效果
2013/09/23 Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
2013/12/02 Javascript
ie7+背景透明文字不透明超级简单的实现方法
2014/01/17 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
angularjs 表单密码验证自定义指令实现代码
2016/10/27 Javascript
原生JS获取元素集合的子元素宽度实例
2016/12/14 Javascript
React利用插件和不用插件实现双向绑定的方法详解
2017/07/03 Javascript
详解React Native网络请求fetch简单封装
2017/08/10 Javascript
jQuery plugin animsition使用小结
2017/09/14 jQuery
20个最常见的jQuery面试问题及答案
2018/05/23 jQuery
[01:02]2014 DOTA2国际邀请赛中国区预选赛 现场抢先看
2014/05/22 DOTA
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
python发送伪造的arp请求
2014/01/09 Python
Python重新引入被覆盖的自带function
2014/07/16 Python
使用简单工厂模式来进行Python的设计模式编程
2016/03/01 Python
Python实现快速计算词频功能示例
2018/06/25 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
Python爬取数据保存为Json格式的代码示例
2019/04/09 Python
python 对字典按照value进行排序的方法
2019/05/09 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
详解python变量与数据类型
2020/08/25 Python
想学画画?python满足你!
2020/12/24 Python
用HTML5.0制作网页的教程
2010/05/30 HTML / CSS
英国最大的专业户外零售商:Mountain Warehouse
2018/06/06 全球购物
J2EE中常用的名词进行解释
2015/11/09 面试题
道路交通事故赔偿协议书
2014/10/24 职场文书
神秘岛读书笔记
2015/07/01 职场文书