{site_name}

{site_name}

🌜 搜索

Python 符号化默认值是指,当函数定义时使用了参数默认值时,Python 将创建一个新的对象来代表该默认值

Python 𝄐 0
python :符号,python赋值符号,python默认的字符编码,python基本符号,python !符号,python中的符号
Python 符号化默认值是指,当函数定义时使用了参数默认值时,Python 将创建一个新的对象来代表该默认值。这个对象在函数调用时会被传递给形参,并且每次函数调用时都会使用相同的默认值对象。

例如,考虑以下 Python 函数:

python
def my_func(a, b=[]):
b.append(a)
return b


在这个函数中,b 参数有一个默认值 [],它表示一个空列表。当不指定 b 参数时,它将使用默认值 []。但是请注意,由于 Python 的符号化默认值机制,仅在第一次调用函数时使用空列表作为默认值。在随后的调用中,仍会使用之前创建的列表对象。因此,如果在多次调用 my_func() 时不显式传递 b 参数,它们将共享同一个列表对象,并且每次调用都会将上一次调用中附加的所有元素添加到列表中。例如:

python
>>> my_func(1)
[1]
>>> my_func(2)
[1, 2]
>>> my_func(3)
[1, 2, 3]


为了避免这种行为,可以在函数内部创建一个新的列表对象作为默认值,而不是使用一个可变的对象。例如,可以写成如下方式:

python
def my_func(a, b=None):
if b is None:
b = []
b.append(a)
return b


这个版本的 my_func() 函数将在每次调用时创建一个新的空列表对象,以代替使用默认值。因此,即使在多次调用中都不显式指定 b 参数,也不会共享同一个列表对象。例如:

python
>>> my_func(1)
[1]
>>> my_func(2)
[2]
>>> my_func(3)
[3]