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 相关文章推荐
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
Jun 25 Python
介绍Python中的文档测试模块
Apr 28 Python
python 生成器生成杨辉三角的方法(必看)
Apr 10 Python
Python urls.py的三种配置写法实例详解
Apr 28 Python
Python安装图文教程 Pycharm安装教程
Mar 27 Python
深入flask之异步非堵塞实现代码示例
Jul 31 Python
Django自定义用户登录认证示例代码
Jun 30 Python
python画图常规设置方式
Mar 05 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
May 22 Python
基于Python绘制美观动态圆环图、饼图
Jun 03 Python
python实现mask矩阵示例(根据列表所给元素)
Jul 30 Python
python的scipy.stats模块中正态分布常用函数总结
Feb 19 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程序之die调试法 快速解决错误
2009/09/17 PHP
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
2011/07/12 PHP
php中函数前加&符号的作用分解
2014/07/08 PHP
php通过ksort()函数给关联数组按照键排序的方法
2015/03/18 PHP
PHP访问数据库集群的方法小结
2016/03/14 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
Git命令之分支详解
2021/03/02 PHP
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
最原始的jQuery注册验证方式
2016/10/11 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
详解JS中的立即执行函数
2017/02/24 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
vue-router中的hash和history两种模式的区别
2018/07/17 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
[57:09]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第一场 1月26日
2021/03/11 DOTA
在python里从协程返回一个值的示例
2019/02/19 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
2019/08/23 Python
python3 实现口罩抽签的功能
2020/03/11 Python
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
匡威荷兰官方网站:Converse荷兰
2018/10/24 全球购物
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
学校办公室主任职责
2013/12/27 职场文书
农村党支部先进事迹
2014/01/14 职场文书
会计辞职信范文
2014/01/15 职场文书
养生餐厅创业计划书范文
2014/03/26 职场文书
读书小明星事迹材料
2014/05/03 职场文书
文艺晚会策划方案
2014/06/11 职场文书
离婚协议书的书写要求
2014/09/17 职场文书
领导干部查摆“四风”问题自我剖析材料思想汇报
2014/10/05 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL
MySQL慢查询优化解决问题
2022/03/17 MySQL
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技
JS class语法糖的深入剖析
2022/07/07 Javascript