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 17 Python
详解Python list 与 NumPy.ndarry 切片之间的对比
Jul 24 Python
python OpenCV学习笔记实现二维直方图
Feb 08 Python
使用Python实现在Windows下安装Django
Oct 17 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
Apr 03 Python
一步步教你用python的scrapy编写一个爬虫
Apr 17 Python
python判断无向图环是否存在的示例
Nov 22 Python
Python 爬取必应壁纸的实例讲解
Feb 24 Python
Python列表解析操作实例总结
Feb 26 Python
python 使用tkinter+you-get实现视频下载器
Nov 17 Python
python反爬虫方法的优缺点分析
Nov 25 Python
Pyside2中嵌入Matplotlib的绘图的实现
Feb 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
2020显卡排行榜天梯图 显卡天梯图2020年3月最新版
2020/04/02 数码科技
php set_time_limit(0) 设置程序执行时间的函数
2010/05/26 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
php微信开发之百度天气预报
2016/11/18 PHP
RR vs IO BO3 第一场2.13
2021/03/10 DOTA
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
jquery如何判断某元素是否具备指定的样式
2013/11/05 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
JS对img标签进行优化使用onerror显示默认图像
2014/04/24 Javascript
基于JavaScript实现生成名片、链接等二维码
2015/09/20 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
Javascript 调用 ActionScript 的简单方法
2016/09/22 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
2016/09/24 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
在一般处理程序(ashx)中弹出js提示语
2017/08/16 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
Vue完整项目构建(进阶篇)
2018/02/10 Javascript
WebSocket的通信过程与实现方法详解
2018/04/29 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
js屏蔽退格键(backspace或者叫后退键与F5)
2019/02/10 Javascript
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
javascript实现文字跑马灯效果
2020/06/18 Javascript
基于Python的身份证号码自动生成程序
2014/08/15 Python
Python 模拟登陆的两种实现方法
2017/08/10 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
15行Python代码带你轻松理解令牌桶算法
2018/03/21 Python
python开头的coding设置方法
2019/08/08 Python
用python3 urllib破解有道翻译反爬虫机制详解
2019/08/14 Python
ZINVO手表官网:男士和女士手表
2019/03/10 全球购物
九年级化学教学反思
2014/01/28 职场文书
医院领导班子整改方案
2014/10/01 职场文书
银行招聘自荐信
2015/03/06 职场文书
golang elasticsearch Client的使用详解
2021/05/05 Golang
《雀魂PONG☆》4月1日播出 PV角色设定情报
2022/03/20 日漫
引用计数法和root搜索算法以及JVM中判定对象需要回收的方法
2022/04/19 Java/Android