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 相关文章推荐
py2exe 编译ico图标的代码
Mar 08 Python
使用IronPython把Python脚本集成到.NET程序中的教程
Mar 31 Python
Flask框架通过Flask_login实现用户登录功能示例
Jul 17 Python
python特性语法之遍历、公共方法、引用
Aug 08 Python
python输入整条数据分割存入数组的方法
Nov 13 Python
windows下 兼容Python2和Python3的解决方法
Dec 05 Python
更新pip3与pyttsx3文字语音转换的实现方法
Aug 08 Python
安装2019Pycharm最新版本的教程详解
Oct 22 Python
Python属性和内建属性实例解析
Jan 14 Python
tensorflow实现在函数中用tf.Print输出中间值
Jan 21 Python
Python稀疏矩阵及参数保存代码实现
Apr 18 Python
利用Matlab绘制各类特殊图形的实例代码
Jul 16 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页面运行时间的函数介绍
2013/07/01 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
HTML中不支持静态Expando的元素的问题
2007/03/08 Javascript
javascript js cookie的存储,获取和删除
2007/12/29 Javascript
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
基于jquery的气泡提示效果
2010/05/31 Javascript
分享一个asp.net pager分页控件
2012/01/04 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
2014/05/02 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
js中取得变量绝对值的方法
2015/01/03 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
JavaScript获得页面base标签中url的方法
2015/04/03 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
2015/09/04 Javascript
js创建对象的方法汇总
2016/01/07 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
Wireshark基本介绍和学习TCP三次握手
2016/08/15 Javascript
Bootstrap fileinput文件上传预览插件使用详解
2017/05/16 Javascript
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
关于element-ui表单中限制输入纯数字的解决方式
2020/09/08 Javascript
微信小程序:报错(in promise) MiniProgramError
2020/10/30 Javascript
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
scrapy爬虫完整实例
2018/01/25 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
2020/04/09 Python
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
韩国江南富人区高端时尚百货商场:Galleria(格乐丽雅)
2018/03/27 全球购物
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
Weblogic的布署方式
2013/08/23 面试题
初三新学期计划书
2014/05/03 职场文书
关于环保的活动方案
2014/08/25 职场文书
工作粗心大意检讨书
2014/09/18 职场文书
爱的教育读书笔记
2015/06/26 职场文书
谢师宴学生答谢词
2015/09/30 职场文书
《藏戏》教学反思
2016/02/23 职场文书
关于flex 上下文中自动 margin的问题(完整例子)
2021/05/20 HTML / CSS