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创建文件和追加文件内容实例
Oct 21 Python
Python中的choice()方法使用详解
May 15 Python
Python中%r和%s的详解及区别
Mar 16 Python
python基于http下载视频或音频
Jun 20 Python
python爬取哈尔滨天气信息
Jul 14 Python
Python中的heapq模块源码详析
Jan 08 Python
浅谈PYTHON 关于文件的操作
Mar 19 Python
Django框架模板的使用方法示例
May 25 Python
使用python的pandas为你的股票绘制趋势图
Jun 26 Python
Pytorch mask_select 函数的用法详解
Feb 18 Python
PyCharm最新激活码PyCharm2020.2.3有效
Nov 18 Python
Python排序函数的使用方法详解
Dec 11 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 来访国内外IP判断代码并实现页面跳转
2009/12/18 PHP
PHP基础学习小结
2011/04/17 PHP
PHP 观察者模式的实现代码
2013/05/10 PHP
jquery.validate使用攻略 第五步 正则验证
2010/07/01 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
JavaScript随机生成信用卡卡号的方法
2015/04/07 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
原生js图片轮播效果实现代码
2016/10/19 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
详解nodejs微信公众号开发——3.封装消息响应模块
2017/04/10 NodeJs
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
使用JSON格式提交数据到服务端的实例代码
2018/04/01 Javascript
JS常见错误(Error)及处理方案详解
2020/07/02 Javascript
JS实现联想、自动补齐国家或地区名称的功能
2020/07/07 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
2020/08/06 Javascript
[54:24]Optic vs TNC 2018国际邀请赛小组赛BO2 第二场
2018/08/18 DOTA
python连接mongodb操作数据示例(mongodb数据库配置类)
2013/12/31 Python
python使用append合并两个数组的方法
2015/04/28 Python
Python3结合Dlib实现人脸识别和剪切
2018/01/24 Python
python pycharm最新版本激活码(永久有效)附python安装教程
2020/09/18 Python
python一些性能分析的技巧
2020/08/30 Python
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
3种方式实现瀑布流布局小结
2019/09/05 HTML / CSS
手工制作的男士奢华英国鞋和服装之家:Goodwin Smith
2019/06/21 全球购物
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
应届毕业生的自我鉴定
2013/11/13 职场文书
国贸专业的职业规划范文
2014/01/23 职场文书
模具专业求职信
2014/06/26 职场文书
2014年安全生产目标责任书
2014/07/23 职场文书
感恩老师演讲稿600字
2014/08/28 职场文书
css3实现背景图片颜色修改的多种方式
2021/04/13 HTML / CSS
Golang 如何实现函数的任意类型传参
2021/04/29 Golang
SQL Server数据库的三种创建方法汇总
2023/05/08 MySQL