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网络编程之读取网站根目录实例
Sep 30 Python
fastcgi文件读取漏洞之python扫描脚本
Apr 23 Python
Python标准库sched模块使用指南
Jul 06 Python
python去除扩展名的实例讲解
Apr 23 Python
python3使用flask编写注册post接口的方法
Dec 28 Python
Pandas之DataFrame对象的列和索引之间的转化
Jun 25 Python
Python 等分切分数据及规则命名的实例代码
Aug 16 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
Oct 24 Python
YUV转为jpg图像的实现
Dec 09 Python
Python有参函数使用代码实例
Jan 06 Python
python爬虫数据保存到mongoDB的实例方法
Jul 28 Python
python 无损批量压缩图片(支持保留图片信息)的示例
Sep 22 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
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
php中inlcude()性能对比详解
2012/09/16 PHP
JavaScript 数组的 uniq 方法
2008/01/23 Javascript
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
Jquery AJAX 用于计算点击率(统计)
2010/06/30 Javascript
javascript下对于事件、事件流、事件触发的顺序随便说说
2010/07/17 Javascript
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
网页右侧悬浮滚动在线qq客服代码示例
2014/04/28 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
JS简单获取及显示当前时间的方法
2016/08/03 Javascript
通过修改360抢票的刷新频率和突破8车次限制实现方法
2017/01/04 Javascript
JS实现的表头列头固定页面功能示例
2017/01/10 Javascript
Bootstrap模态框使用详解
2017/02/15 Javascript
详解node HTTP请求客户端 - Request
2017/05/05 Javascript
Ionic3 UI组件之autocomplete详解
2017/06/08 Javascript
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
浅谈Python中列表生成式和生成器的区别
2015/08/03 Python
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
Python爬虫之urllib基础用法教程
2019/10/12 Python
Jupyter Notebook的连接密码 token查询方式
2020/04/21 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
解决python 执行sql语句时所传参数含有单引号的问题
2020/06/06 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
python+requests实现接口测试的完整步骤
2020/10/27 Python
总结python 三种常见的内存泄漏场景
2020/11/20 Python
PyTorch中的拷贝与就地操作详解
2020/12/09 Python
艺龙旅行网酒店预订:国内、港澳台酒店
2018/06/26 全球购物
80年代复古T恤:TruffleShuffle
2018/07/02 全球购物
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
厉行勤俭节约倡议书
2014/05/16 职场文书
党员个人整改方案及措施
2014/10/25 职场文书
毕业实习证明范本
2015/06/16 职场文书