gpt4 book ai didi

python - python 函数中默认参数的值

转载 作者:行者123 更新时间:2023-12-01 08:03:18 25 4
gpt4 key购买 nike

我阅读了以下教程:

https://docs.python.org/3/tutorial/controlflow.html#default-argument-values

并做一些实验。

我发现默认参数非常困惑。谁能解释一下以下现象?

首先,我尝试了以下代码:

Code 1

def f(a, L=[]):
L.append(a)
return L

print(f(1))
print(f(2))
print(f(3))

结果是:

[1]
[1, 2]
[1, 3, 3]

根据文档,这是因为默认参数 L 是可变的,并且在定义函数时它的值只会被计算一次。看起来不错!

但是,我接下来尝试了代码 2:

Code 2

def f(a, L=None):
if L is None:
L = []
L.append(a)
return L

print(f(1))
print(f(2))
print(f(3))

结果是:

[1]
[2]
[3]

为了研究默认参数,我改进了代码 2 并尝试了代码 3:

Code 3

def f(a, L=None):
print(type(L))
print(id(L))
print(L)

if L is None:
L = []
print(id(L))

L.append(a)
return L

print(f(1))
print(f(2))
print(f(3))

结果是:

<class 'NoneType'>
4381397320
None
4385607368
[1]

<class 'NoneType'>
4381397320
None
4385607496
[2]

<class 'NoneType'>
4381397320
None
4386251464
[3]

这表明if语句之前的L始终为None,并且与if语句中的L的id不同,并且前者的id是固定的,而后者的id在每次运行中都会变化。

我还尝试了以下代码:

L_r = f(5)
print(id(L_r))

结果是:

<class 'NoneType'>
4381397320
None
4385607496
4385607496

这表明L_r与if语句中的L具有相同的id。

你能解释一下 if 语句外和 if 语句内的 L 有什么区别以及原因吗?

谢谢!

最佳答案

如果您不提供L,默认参数将创建一个变量L,并将其重用于您的多次调用,因此在代码1,它是在同一个L中编辑的。

但是在代码2中,您更改了函数中的L:

if L is None:
L = []

默认参数L=None始终与代码1相同(id=4381397320),但此语句使L 引用了一个新变量,因此 id 会不同,并且结果不会累积。

希望对您有帮助,如有疑问请评论。 :)

关于python - python 函数中默认参数的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55644060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com