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字典基本操作实例分析
Jul 11 Python
用Python写冒泡排序代码
Apr 12 Python
Pytorch入门之mnist分类实例
Apr 14 Python
windows下安装Python的XlsxWriter模块方法
May 03 Python
Python双向循环链表实现方法分析
Jul 30 Python
对python中Librosa的mfcc步骤详解
Jan 09 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
Mar 14 Python
使用Python对Dicom文件进行读取与写入的实现
Apr 20 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
Apr 22 Python
在Sublime Editor中配置Python环境的详细教程
May 03 Python
Pytorch可视化的几种实现方法
Jun 10 Python
Python制作动态字符画的源码
Aug 04 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编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
PHP中输出转义JavaScript代码的实现代码
2011/04/22 PHP
php中禁止单个IP与ip段访问的代码小结
2012/07/04 PHP
判断php数组是否为索引数组的实现方法
2013/06/13 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
2016/10/08 PHP
javascript multibox 全选
2009/03/22 Javascript
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
js实现三张图(文)片一起切换的banner焦点图
2015/08/25 Javascript
jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等)
2016/04/18 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
2016/11/03 Javascript
vue2导航根据路由传值,而改变导航内容的实例
2017/11/10 Javascript
React 使用Hooks简化受控组件的状态绑定
2019/03/18 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
js表达式与运算符简单操作示例
2020/02/15 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
浅谈JavaScript中this的指向问题
2020/07/28 Javascript
js实现弹窗猜数字游戏
2020/11/26 Javascript
Python中条件判断语句的简单使用方法
2015/08/21 Python
网站渗透常用Python小脚本查询同ip网站
2017/05/08 Python
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
Python3.7 新特性之dataclass装饰器
2019/05/27 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
python使用turtle库绘制奥运五环
2020/02/24 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
css3图片边框border-image的用法
2017/06/30 HTML / CSS
css3 响应式媒体查询的示例代码
2019/09/25 HTML / CSS
Booking.com德国:预订最好的酒店和住宿
2020/02/16 全球购物
杭州信雅达系统.NET工程师面试试题
2015/02/08 面试题
法学毕业生自我鉴定
2014/01/31 职场文书
自强之星事迹材料
2014/05/12 职场文书
居安思危观后感
2015/06/11 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书
关于CSS自定义属性与前端页面的主题切换问题
2022/03/21 HTML / CSS