gpt4 book ai didi

python - `def` 什么时候在 python 中运行?函数对象什么时候初始化?

转载 作者:行者123 更新时间:2023-11-28 19:09:07 24 4
gpt4 key购买 nike

假设我们在一个文件中有一个函数,比如:

..... other fucntions
def add_to_list(l = []):
l.append("foo")
..... other functions

什么时候调用defdef 究竟做了什么?

最佳答案

[] 创建一个列表,出于效率原因,当列表被传递时,它不会被复制或按值传递;它是通过引用发送的。类似的事情正在发生。所以,首先所有的 def 都是由 Python 初始化的。然后你的代码运行。但是,初始化器已经创建了列表。

>>> id(add_to_list())
12516768
>>> id(add_to_list())
12516768
>>> id(add_to_list())
12516768

摘自 http://effbot.org/zone/default-values.htm

请注意它们如何具有相同的 ID?那是因为它每次都返回相同的列表实例。因此, l = [] 不会在运行时创建新实例。因此,我们继续追加到相同实例。

这就是为什么我们不会在使用整数、 float 等时遇到这种行为。

考虑您的代码:

def add_to_list(l = []):
l.append("foo")
print(l)
add_to_list()
add_to_list()

然后是输出:

['foo']
['foo', 'foo']

现在考虑这个类似的函数:

def add_to_list():
l = []
l.append("foo")
print(l)
add_to_list()
add_to_list()

输出将是:

['foo']
['foo']

那是因为 l = [] 在构造函数初始化后运行(实时)。当您考虑第一段代码时,您会看到构造函数首先运行,然后代码实时执行。

关于python - `def` 什么时候在 python 中运行?函数对象什么时候初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42798615/

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