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 相关文章推荐
Pthon批量处理将pdb文件生成dssp文件
Jun 21 Python
Python判断中文字符串是否相等的实例
Jul 06 Python
使用 python pyautogui实现鼠标键盘控制功能
Aug 04 Python
python中struct模块之字节型数据的处理方法
Aug 27 Python
Python 转换RGB颜色值的示例代码
Oct 13 Python
python的pyecharts绘制各种图表详细(附代码)
Nov 11 Python
python DataFrame转dict字典过程详解
Dec 26 Python
Python + selenium + crontab实现每日定时自动打卡功能
Mar 31 Python
matlab、python中矩阵的互相导入导出方式
Jun 01 Python
Python虚拟环境的创建和包下载过程分析
Jun 19 Python
Python  word实现读取及导出代码解析
Jul 09 Python
python如何将mat文件转为png
Jul 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
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
ThinkPHP实现支付宝接口功能实例
2014/12/02 PHP
php循环table实现一行两列显示的方法
2015/06/04 PHP
PHP实现HTML页面静态化的方法
2015/11/04 PHP
php gd等比例缩放压缩图片函数
2016/06/12 PHP
php封装的mysqli类完整实例
2016/10/18 PHP
php die()与exit()的区别实例详解
2016/12/03 PHP
由document.body和document.documentElement想到的
2009/04/13 Javascript
jquery validate poshytip 自定义样式
2012/11/26 Javascript
js换图片效果可进行定时操作
2014/06/09 Javascript
node.js中的fs.readFile方法使用说明
2014/12/15 Javascript
详解vue 组件之间使用eventbus传值
2017/10/25 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
javascript中innerHTML 获取或替换html内容的实现代码
2020/03/17 Javascript
javascript设计模式 ? 简单工厂模式原理与应用实例分析
2020/04/09 Javascript
原生js实现html手机端城市列表索引选择城市
2020/06/24 Javascript
详解Vue的mixin策略
2020/11/19 Vue.js
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
Python 基础教程之包和类的用法
2017/02/23 Python
利用python爬取散文网的文章实例教程
2017/06/18 Python
Python 函数返回值的示例代码
2019/03/11 Python
Python QTimer实现多线程及QSS应用过程解析
2020/07/11 Python
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
阿根廷票务网站:StubHub阿根廷
2018/04/13 全球购物
意大利奢侈品牌在线精品店:Jole.it
2020/11/23 全球购物
酒吧创业计划书
2014/01/18 职场文书
12月小学生校园广播稿
2014/02/04 职场文书
公司寄语大全
2014/04/10 职场文书
关于环保的演讲稿
2014/05/10 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
MongoDB安装使用并实现Python操作数据库
2021/06/28 MongoDB
Redis主从配置和底层实现原理解析(实战记录)
2021/06/30 Redis
python 进阶学习之python装饰器小结
2021/09/04 Python
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python
uniapp引入支付宝原生扫码插件步骤详解
2022/07/23 Javascript
什么是clearfix (一文搞清楚css清除浮动clearfix)
2023/05/21 HTML / CSS