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实现比较两个列表(list)范围
Jun 12 Python
python+selenium开发环境搭建图文教程
Aug 11 Python
解决Django模板无法使用perms变量问题的方法
Sep 10 Python
python Socket之客户端和服务端握手详解
Sep 18 Python
python读取图片并修改格式与大小的方法
Jul 24 Python
Python OpenCV之图片缩放的实现(cv2.resize)
Jun 28 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
Pytorch实现各种2d卷积示例
Dec 30 Python
tensorflow 变长序列存储实例
Jan 20 Python
Python 定义只读属性的实现方式
Mar 05 Python
Selenium 滚动页面至元素可见的方法
Mar 18 Python
python爬取招聘要求等信息实例
Nov 20 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面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
PHP获取文件的MD5值并判断是否被修改的例子
2014/06/19 PHP
php给每个段落添加空格的方法
2015/03/20 PHP
PHP数组实际占用内存大小原理解析
2020/12/11 PHP
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
jquery怎样实现ajax联动框(一)
2013/03/08 Javascript
JQuery 常用方法和事件详细介绍
2013/04/18 Javascript
调试代码导致IE出错的避免方法
2014/04/04 Javascript
jquery使用animate方法实现控制元素移动
2015/03/27 Javascript
jQuery中使用each处理json数据
2015/04/23 Javascript
jQuery插件datepicker 日期连续选择
2015/06/12 Javascript
初步使用bootstrap快速创建页面
2016/03/03 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
详解webpack+express多页站点开发
2017/12/22 Javascript
Nodejs模块载入运行原理
2018/02/23 NodeJs
浅谈Angular7 项目开发总结
2018/12/19 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
2019/06/03 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
让IDE识别webpack的别名alias的实现方法
2020/05/06 Javascript
[02:36]DOTA2混沌骑士 英雄基础教程
2013/11/26 DOTA
Python学习教程之常用的内置函数大全
2017/07/14 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
python文件处理fileinput使用方法详解
2020/01/02 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
2020/05/15 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
解决python 虚拟环境删除包无法加载的问题
2020/07/13 Python
Java里面如何把一个Array数组转换成Collection, List
2013/07/26 面试题
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2013/05/03 面试题
关于迟到的检讨书
2014/01/26 职场文书
产品包装策划方案
2014/05/18 职场文书
给客户的检讨书
2014/12/21 职场文书
社区三八妇女节活动总结
2015/02/06 职场文书
2015年教师工作总结范文
2015/03/31 职场文书
2015年人事科工作总结
2015/04/28 职场文书
公司车辆维修管理制度
2015/08/05 职场文书
mysql 联合索引生效的条件及索引失效的条件
2021/11/20 MySQL