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 相关文章推荐
go和python变量赋值遇到的一个问题
Aug 31 Python
python跳过第一行快速读取文件内容的实例
Jul 12 Python
Python 字符串与二进制串的相互转换示例
Jul 23 Python
Selenium元素的常用操作方法分析
Aug 10 Python
python 拼接文件路径的方法
Oct 23 Python
对Python3 序列解包详解
Feb 16 Python
python3多线程知识点总结
Sep 26 Python
Python加密模块的hashlib,hmac模块使用解析
Jan 02 Python
Python实现链表反转的方法分析【迭代法与递归法】
Feb 22 Python
python退出循环的方法
Jun 18 Python
python实现梯度下降算法的实例详解
Aug 17 Python
Python实现将多张图片合成MP4视频并加入背景音乐
Apr 28 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密码生成类实例
2014/09/24 PHP
ThinkPHP模型详解
2015/07/27 PHP
JavaScript函数作用域链分析
2015/02/13 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
Angular实现form自动布局
2016/01/28 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
Bootstrap CSS布局之表格
2016/12/17 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
2017/02/15 Javascript
详解Angular 4.x Injector
2017/05/04 Javascript
layui前段框架日期控件使用方法详解
2017/05/19 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
2017/09/19 Javascript
layui前端框架之table表数据的刷新方法
2018/08/17 Javascript
vue+axios+promise实际开发用法详解
2018/10/15 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
JQuery animate动画应用示例
2019/05/14 jQuery
layui实现给某一列加点击事件
2019/10/26 Javascript
基于javascript实现放大镜特效
2020/12/03 Javascript
对于Python的Django框架使用的一些实用建议
2015/04/03 Python
详解在Python中处理异常的教程
2015/05/24 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
Python TestSuite生成测试报告过程解析
2020/07/23 Python
python3爬虫中引用Queue的实例讲解
2020/11/24 Python
IE矩阵Matrix滤镜旋转与缩放及如何结合transform
2012/11/29 HTML / CSS
css3 transform及原生js实现鼠标拖动3D立方体旋转
2016/06/20 HTML / CSS
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
HTML5未来发展趋势
2016/02/01 HTML / CSS
大学生就业求职信
2014/06/12 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
普通党员四风问题对照检查材料
2014/09/27 职场文书
小学教师自我剖析材料
2014/09/29 职场文书
2015年预防青少年违法犯罪工作总结
2015/05/22 职场文书
仙境之桥观后感
2015/06/16 职场文书
python实现A*寻路算法
2021/06/13 Python
Java实现给Word文件添加文字水印
2022/02/15 Java/Android
Python通用验证码识别OCR库ddddocr的安装使用教程
2022/07/07 Python