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下载文件时显示下载进度的方法
Apr 02 Python
python 除法保留两位小数点的方法
Jul 16 Python
python环形单链表的约瑟夫问题详解
Sep 27 Python
简单了解django orm中介模型
Jul 30 Python
python实现的批量分析xml标签中各个类别个数功能示例
Dec 30 Python
python实现简单飞行棋
Feb 06 Python
PyCharm 在Windows的有用快捷键详解
Apr 07 Python
python实现交并比IOU教程
Apr 16 Python
Django def clean()函数对表单中的数据进行验证操作
Jul 09 Python
详解python tcp编程
Aug 24 Python
python使用glob检索文件的操作
May 20 Python
教你怎么用Python实现GIF动图的提取及合成
Jun 15 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数字和字符串ID互转函数(类似优酷ID)
2014/06/30 PHP
php生成短网址/短链接原理和用法实例分析
2020/05/29 PHP
JSQL  一个 web DB 的封装
2010/05/05 Javascript
jquery 图片轮换效果
2010/07/29 Javascript
node.js中的fs.chmod方法使用说明
2014/12/18 Javascript
创建、调用JavaScript对象的方法集锦
2014/12/24 Javascript
Flash图片上传组件 swfupload使用指南
2015/03/14 Javascript
js获取表格的行数和列数的方法
2015/10/23 Javascript
JavaScript数组去重的五种方法
2015/11/05 Javascript
js css+html实现简单的日历
2016/07/14 Javascript
如何判断出一个js对象是否一个dom对象
2016/11/24 Javascript
javascript表单正则应用
2017/02/04 Javascript
js 简易版滚动条实例(适用于移动端H5开发)
2017/06/26 Javascript
JavaScript调试之console.log调试的一个小技巧分享
2017/08/07 Javascript
不使用JavaScript实现菜单的打开和关闭效果demo
2018/05/01 Javascript
webpack 3.X学习之多页面打包的方法
2018/09/04 Javascript
详解新手使用vue-router传参时注意事项
2019/06/06 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
js+springMVC 提交数组数据到后台的实例
2019/09/21 Javascript
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
Python 的描述符 descriptor详解
2016/02/27 Python
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
python logging模块书写日志以及日志分割详解
2019/07/22 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
2020/04/24 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
2020/07/01 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
2020/09/26 Python
详解H5 活动页之移动端 REM 布局适配方法
2017/12/07 HTML / CSS
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
运行时异常与一般异常有何异同?
2014/01/05 面试题
教师实习自我鉴定
2013/12/18 职场文书
土地转让协议书范本
2014/04/15 职场文书
模范班主任事迹材料
2014/12/17 职场文书
职场中的你,辞职信写对了吗?
2019/06/26 职场文书
Python-typing: 类型标注与支持 Any类型详解
2021/05/10 Python