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实现壁纸批量下载代码实例
Jan 25 Python
利用python为运维人员写一个监控脚本
Mar 25 Python
python opencv检测目标颜色的实例讲解
Apr 02 Python
Sanic框架配置操作分析
Jul 17 Python
Django后台admin的使用详解
Jul 08 Python
通过python改变图片特定区域的颜色详解
Jul 15 Python
pytorch索引查找 index_select的例子
Aug 18 Python
Python基于class()实现面向对象原理详解
Mar 26 Python
python实现人像动漫化的示例代码
May 17 Python
matplotlib subplot绘制多个子图的方法示例
Jul 28 Python
详解Java中一维、二维数组在内存中的结构
Feb 11 Python
利用Python如何画一颗心、小人发射爱心
Feb 21 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/07/01 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
微信access_token的获取开发示例
2015/04/16 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
2015/10/09 PHP
[原创]PHP简单开启curl的方法(测试可行)
2016/01/11 PHP
PHP实现微信提现(企业付款到零钱)
2019/08/01 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
页面载入结束自动调用js函数示例
2013/09/23 Javascript
table行随鼠标移动变色示例
2014/05/07 Javascript
javascript的push使用指南
2014/12/05 Javascript
AngularJS中比较两个数组是否相同
2016/08/24 Javascript
JavaScript实用代码小技巧
2018/08/23 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
2019/03/27 Javascript
详解django模板与vue.js冲突问题
2019/07/07 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
2019/12/12 Javascript
微信小程序聊天功能的示例代码
2020/01/13 Javascript
React实现类似淘宝tab居中切换效果的示例代码
2020/06/02 Javascript
vue实现放大镜效果
2020/09/17 Javascript
[33:09]完美世界DOTA2联赛循环赛 Forest vs DM BO2第二场 10.29
2020/10/29 DOTA
详解使用Python处理文件目录的相关方法
2015/10/16 Python
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
Python中xml和json格式相互转换操作示例
2018/12/05 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
Python pytesseract验证码识别库用法解析
2020/06/29 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
模具专业毕业生自荐书范文
2014/02/19 职场文书
先进班集体申报材料
2014/12/26 职场文书
单位介绍信格式
2015/01/31 职场文书
二手房购房意向书
2015/05/09 职场文书
2015年医务科工作总结范文
2015/05/26 职场文书
导游词之阳朔遇龙河
2019/12/16 职场文书
MySQL慢查询的坑
2021/04/28 MySQL
linux下导入、导出mysql数据库命令的实现方法
2021/05/26 MySQL
2022微信温控新功能上线
2022/05/09 数码科技