【发布时间】:2017-04-06 12:38:52
【问题描述】:
来自 Summerfield 的 Python3 编程:
它是这样说的: 当给定默认值时,它们是在执行 def 语句时创建的,而不是在调用函数时创建的。 但我的问题是针对以下示例:
def append_if_even(x, lst =None):
lst = [] if lst is None else lst
if x % 2 ==0:
lst.append(x)
return lst
作为第一次执行的定义,lst 指向 None 但是在函数调用 append_if_even(2) 之后,
不应 lst 指向 [2],因为在 lst.append(x) 之后 lst 不再指向 None 了?
为什么下一次执行仍然让 lst 指向无?
- 在这个函数调用 append_if_even(2) 中到底发生了什么?
【问题讨论】:
-
参数
x和lst是不是全局变量。所以设置它们对第二次调用没有影响。 -
就是函数创建后,会为这个函数的默认参数创建一个内存空间。当需要默认参数时,这个本地 lst 将被分配给值 None 的创建空间?这就是默认参数在 python 中的工作方式吗?
-
@wllLiu:嗯,只有一个
None。但是假设您指定了lst = []。它将构建一个列表。如果您没有指定lst,lst将引用该列表。否则对给定的论点。但是设置参数本身没有影响。
标签: python-3.x default-arguments