Python中的默认参数实例分析


Posted in Python onJanuary 29, 2018

本文研究的主要是Python中的默认参数的相关内容,具体如下。

熟悉C++语言的可以知道,C++语言中的默认参数是写在函数声明中的,为语法糖,与函数的调用无关,是在函数调用的时候由编译器补齐参数然后进行调用。

而Python中的默认参数与其有相当大的不一样,如下例中的代码执行结果会是什么呢?

def test_parameter(a, dfp=[]):
 dfp.append(a)
 print(dfp)

test_parameter(1)
test_parameter(2)
test_parameter(3)

从结果中可以看到其结果如下,与我们期望完全不一致:

[1]
[1, 2]
[1, 2, 3]

分析

为什么Python的默认参数是这样的表现,需要从Python的函数定义说起。Python中 def 实际上是可执行语句,执行 def 的时候会创建一个函数对象,而默认参数也会在执行 def 语句的时候计算出来并存在函数的_defaults_属性中。

def test_parameter(a, dfp=[]):
 dfp.append(a)
 print(id(dfp))

test_parameter(1)
test_parameter(2)
print(test_parameter.__defaults__)
print(id(test_parameter.__defaults__[0]))

结果如下,可见调用函数时使用的默认参数和_defaults_中的对象为同一对象:

140109485401224
140109485401224
([1, 2],)
140109485401224

使用

在明白上述原理后,可以知道以后在使用默认参数的时候需要注意,如果默认参数是可变对象则需要判断是否每次调用函数时是共享默认参数还是产生新对象。如果是新生成对象,常采用None作为默认参数占位,如果判断当前为None,则新建可变对象使用。

def test(a, dfp=None):
 if dfp is None:
  dfp = []
 pass #使用dfp

总结

以上就是本文关于Python中的默认参数实例分析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
Python通过递归遍历出集合中所有元素的方法
Feb 25 Python
python中迭代器(iterator)用法实例分析
Apr 29 Python
Python文件夹与文件的相关操作(推荐)
Jul 25 Python
Python探索之ModelForm代码详解
Oct 26 Python
python实现zabbix发送短信脚本
Sep 17 Python
Python字典循环添加一键多值的用法实例
Jan 20 Python
PyQt5实现从主窗口打开子窗口的方法
Jun 19 Python
Ubuntu+python将nii图像保存成png格式
Jul 18 Python
pycharm解决关闭flask后依旧可以访问服务的问题
Apr 03 Python
python sitk.show()与imageJ结合使用常见的问题
Apr 20 Python
Python datetime模块的使用示例
Feb 02 Python
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
Jun 22 Python
Python使用遗传算法解决最大流问题
Jan 29 #Python
Python subprocess模块详细解读
Jan 29 #Python
python微信跳一跳游戏辅助代码解析
Jan 29 #Python
Python面向对象之继承代码详解
Jan 29 #Python
Python多线程threading和multiprocessing模块实例解析
Jan 29 #Python
Python编程scoketServer实现多线程同步实例代码
Jan 29 #Python
Python模块搜索路径代码详解
Jan 29 #Python
You might like
PHP 和 XML: 使用expat函数(二)
2006/10/09 PHP
php做下载文件的实现代码及文件名中乱码解决方法
2011/02/03 PHP
php定时执行任务设置详解
2015/02/06 PHP
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
2018/08/21 PHP
filemanage功能中用到的lib.js
2007/04/08 Javascript
JavaScript 嵌套函数指向this对象错误的解决方法
2010/03/15 Javascript
基于jquery的鼠标拖动效果代码
2012/05/30 Javascript
js 验证密码强弱的小例子
2013/03/21 Javascript
JavaScript通过元素的ID和name设置样式
2014/07/08 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
js+html5实现canvas绘制椭圆形图案的方法
2016/05/21 Javascript
将鼠标焦点定位到文本框最后(代码分享)
2017/01/11 Javascript
Angularjs修改密码的实例代码
2017/05/26 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
2017/06/08 Javascript
原生JS实现小小的音乐播放器
2017/10/16 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
微信小程序手机号码验证功能的实例代码
2018/08/28 Javascript
vue如何获取自定义元素属性参数值的方法
2019/05/14 Javascript
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
Python中selenium实现文件上传所有方法整理总结
2017/04/01 Python
python处理multipart/form-data的请求方法
2018/12/26 Python
Python实现基于SVM的分类器的方法
2019/07/19 Python
东南亚地区最大的购物网站Lazada新加坡站点:Lazada.sg
2016/07/17 全球购物
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
班级道德讲堂实施方案
2014/02/24 职场文书
令人印象深刻的自荐信
2014/05/25 职场文书
五四青年节优秀演讲稿范文
2014/05/28 职场文书
语文教研活动总结
2014/07/02 职场文书
村干部任职承诺书
2015/01/21 职场文书
企业战略合作意向书
2015/05/08 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
Java内存模型之happens-before概念详解
2021/06/13 Java/Android
用Python编写简单的gRPC服务的详细过程
2021/07/04 Python