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解析XML的几种方式
Feb 16 Python
python编程羊车门问题代码示例
Oct 25 Python
Pycharm 实现下一个文件引用另外一个文件的方法
Jan 17 Python
python破解bilibili滑动验证码登录功能
Sep 11 Python
Python:slice与indices的用法
Nov 25 Python
对tensorflow中cifar-10文档的Read操作详解
Feb 10 Python
python+selenium+PhantomJS抓取网页动态加载内容
Feb 25 Python
django实现后台显示媒体文件
Apr 07 Python
如何使用python切换hosts文件
Apr 29 Python
python/golang 删除链表中的元素
Sep 14 Python
Python趣味爬虫之用Python实现智慧校园一键评教
May 28 Python
OpenCV-Python实现轮廓拟合
Jun 08 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
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
php中static 静态变量和普通变量的区别
2016/12/01 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
javascritp添加url参数将参数加入到url中
2014/09/25 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
2015/05/25 Javascript
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
JavaScript如何实现组合列表框中元素移动效果
2016/03/01 Javascript
jQuery中的insertBefore(),insertAfter(),after(),before()区别介绍
2016/09/01 Javascript
浅谈jquery拼接字符串效率比较高的方法
2017/02/22 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
手把手教你vue-cli单页到多页应用的方法
2018/05/31 Javascript
详解React中合并单元格的正确写法
2019/01/08 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
js 根据对象数组中的属性进行排序实现代码
2019/09/12 Javascript
layui使用form表单实现post请求页面跳转的方法
2019/09/14 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
[46:44]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
[43:58]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第一场 1月8日
2021/03/11 DOTA
使用Python编写Linux系统守护进程实例
2015/02/03 Python
利用Python批量生成任意尺寸的图片
2016/08/29 Python
pycharm 配置远程解释器的方法
2018/10/28 Python
Anaconda的安装及其环境变量的配置详解
2020/04/22 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
Django集成MongoDB实现过程解析
2020/12/01 Python
英国时尚配饰、珠宝和服装网站:KJ Beckett
2020/01/23 全球购物
大四学生毕业自荐信
2013/11/07 职场文书
优秀毕业生自荐信范文
2014/01/01 职场文书
商场拾金不昧表扬信
2014/01/13 职场文书
《一个小村庄的故事》教学反思
2014/04/13 职场文书
环保建议书100字
2014/05/14 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书
创业的9条正确思考方式
2019/08/26 职场文书
关于企业的执行力标语大全
2020/01/06 职场文书