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 BeautifulSoup库抓取58手机维修信息
Nov 21 Python
python返回昨天日期的方法
May 13 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
Apr 27 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
Apr 28 Python
python3 kmp 字符串匹配的方法
Jul 07 Python
Pandas删除数据的几种情况(小结)
Jun 21 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
Oct 11 Python
python创建ArcGIS shape文件的实现
Dec 06 Python
Python 列表的清空方式
Jan 13 Python
Python3运算符常见用法分析
Feb 14 Python
Python2及Python3如何实现兼容切换
Sep 01 Python
python 三边测量定位的实现代码
Apr 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
php数组删除元素示例
2014/03/21 PHP
PHP has encountered a Stack overflow问题解决方法
2014/11/03 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
PHP自带方法验证邮箱是否存在
2016/02/01 PHP
Windows 下安装 swoole 图文教程(php)
2017/06/05 PHP
js Array对象的扩展函数代码
2013/04/24 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
Javascript 遍历页面text控件详解
2014/01/06 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
js完美解决IE6不支持position:fixed的bug
2015/04/24 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
2015/06/18 Javascript
javascript 数组的正态分布排序的问题
2016/07/31 Javascript
前端开发必知的15个jQuery小技巧
2017/01/22 Javascript
微信小程序 setData使用方法及常用错误解决办法
2017/05/11 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
微信小程序实现发红包功能
2018/07/11 Javascript
ES7之Async/await的使用详解
2019/03/28 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
Angular6使用forRoot() 注册单一实例服务问题
2019/08/27 Javascript
低版本中Python除法运算小技巧
2015/04/05 Python
Python 基础之字符串string详解及实例
2017/04/01 Python
详解python里使用正则表达式的全匹配功能
2017/10/19 Python
使用python进行拆分大文件的方法
2018/12/10 Python
详解从Django Rest Framework响应中删除空字段
2019/01/11 Python
Python使用sax模块解析XML文件示例
2019/04/04 Python
python中yield的用法详解——最简单,最清晰的解释
2019/04/04 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
2020/04/18 Python
ubuntu上安装python的实例方法
2019/09/30 Python
Python 下载Bing壁纸的示例
2020/09/29 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
Move Free官方海外旗舰店:美国骨关节健康专业品牌
2017/12/06 全球购物
大学活动策划书范文
2014/01/10 职场文书
三年大学自我鉴定
2014/01/16 职场文书
大学生党员批评与自我批评范文
2014/10/14 职场文书
施工员岗位职责
2015/02/10 职场文书