Python中的默认参数实例分析
作者:spirit_djy 时间:2023-02-20 20:19:38
本文研究的主要是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
来源:http://blog.csdn.net/spirit_djy/article/details/50663563
标签:python,默认参数
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Mysql自增主键id不是以此逐级递增的处理
2024-01-19 03:07:55
![](https://img.aspxhome.com/file/2023/9/69869_0s.png)
非常全面的Python常见基础面试题及答案
2022-11-14 17:03:33
![](https://img.aspxhome.com/file/2023/2/84072_0s.gif)
使用Python AIML搭建聊天机器人的方法示例
2022-01-04 10:14:28
MySQL安全策略(MySQL安全注意事项)
2024-01-22 19:57:25
Python算法输出1-9数组形成的结果为100的所有运算式
2022-05-02 22:45:48
Pytorch损失函数torch.nn.NLLLoss()的使用
2021-02-07 16:08:57
![](https://img.aspxhome.com/file/2023/4/105714_0s.png)
SQL查询不重复记录/删除重复记录
2008-11-18 16:08:00
Oracle数据库的空间管理技巧
2010-07-26 13:16:00
MySQL数据库管理必备工具 phpMyAdmin 3.0
2008-12-10 14:12:00
![](https://img.aspxhome.com/file/UploadPic/200812/20081212115238456.jpg)
图像替换新技术:状态域方法[译]
2009-08-06 16:41:00
弹性+固宽布局
2009-05-15 12:19:00
![](https://img.aspxhome.com/file/UploadPic/20095/15/01-19s.jpg)
Python操作MongoDB数据库PyMongo库使用方法
2023-03-16 00:13:14
python中的计时器timeit的使用方法
2023-04-24 14:50:56
白鸦:内容设计,初始内容
2008-03-04 16:23:00
laravel框架中路由设置,路由参数和路由命名实例分析
2024-06-05 09:43:33
python图片灰度化处理的几种方法
2023-03-05 01:14:57
![](https://img.aspxhome.com/file/2023/9/112979_0s.jpg)
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2024-05-11 09:55:05
golang中之strconv包的具体使用方法
2024-02-01 00:03:20
Python实现微信好友数据爬取及分析
2021-09-30 04:51:55
![](https://img.aspxhome.com/file/2023/9/101599_0s.jpg)
MySQL绿色解压缩版安装与配置操作步骤
2024-01-14 07:00:15