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缩进和冒号详解
Jun 01 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
Jun 21 Python
Python找出最小的K个数实例代码
Jan 04 Python
快速解决PyCharm无法引用matplotlib的问题
May 24 Python
解决python3 pika之连接断开的问题
Dec 18 Python
解决PyCharm控制台输出乱码的问题
Jan 16 Python
PyQt5笔记之弹出窗口大全
Jun 20 Python
解决Tensorflow占用GPU显存问题
Feb 03 Python
Python基础之字符串操作常用函数集合
Feb 09 Python
pandas dataframe 中的explode函数用法详解
May 18 Python
Python爬虫之爬取最新更新的小说网站
May 06 Python
如何将numpy二维数组中的np.nan值替换为指定的值
May 14 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中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
限制ckeditor上传图片文件大小的方法
2013/11/15 PHP
Php中使用Select 查询语句的实例
2014/02/19 PHP
Laravel 5框架学习之用户认证
2015/04/09 PHP
从刷票了解获得客户端IP的方法
2015/09/21 PHP
php多进程模拟并发事务产生的问题小结
2018/12/07 PHP
网站被黑的假象--ARP欺骗之页面中加入一段js
2007/05/16 Javascript
IE和Firefox的Javascript兼容性总结[推荐收藏]
2011/10/19 Javascript
让低版本浏览器支持input的placeholder属性(js方法)
2013/04/03 Javascript
JavaScript中的普通函数与构造函数比较
2015/04/07 Javascript
jQuery实现宽屏图片轮播实例教程
2015/11/24 Javascript
学习jQuey中的return false
2015/12/18 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
js 自带的sort() 方法全面了解
2016/08/16 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
JS表单数据验证的正则表达式(常用)
2017/02/18 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
微信小程序之事件交互操作实例分析
2018/12/03 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
[02:20]DOTA2亚洲邀请赛 IG战队出场宣传片
2015/02/07 DOTA
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
Python中的一些陷阱与技巧小结
2015/07/10 Python
python3实现全角和半角字符转换的方法示例
2017/09/21 Python
Python中Threading用法详解
2017/12/27 Python
一篇文章读懂Python赋值与拷贝
2018/04/19 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
python爬取内容存入Excel实例
2019/02/20 Python
Python的logging模块基本用法
2020/12/24 Python
html5 div布局与table布局详解
2016/11/16 HTML / CSS
2014年会计主管工作总结
2014/12/20 职场文书
道歉情书大全
2015/05/12 职场文书
老员工辞职信范文
2015/05/12 职场文书
Python道路车道线检测的实现
2021/06/27 Python
JavaScript原型链详解
2021/11/07 Javascript
HTML CSS 一个标签实现带动画的抖音LOGO
2022/04/26 HTML / CSS