This question already has answers here:
Global dictionaries don't need keyword global to modify them? [duplicate]
(2 个回答)
3年前关闭。
在下面的代码中,
python 解释器不希望
但是在下面的代码中
问题:
为什么python解释器需要在
(2 个回答)
3年前关闭。
在下面的代码中,
def makeAverage():
series = []
def average(newValue):
series.append(newValue)
total = sum(series)
return total/len(series)
return average
python 解释器不希望
series
是 nonlocal
中的 average()
。但是在下面的代码中
def makeAverage():
count = 0
total = 0
def average(newValue):
nonlocal count, total
count += 1
total += newValue
return total/count
return average
问题:
为什么python解释器需要在
count
中声明total
和nonlocal
? 最佳答案
如果您在函数中的任何位置将变量分配给该函数,并且不以其他方式标记它(使用 global
或 nonlocal
),则该变量被视为函数的局部变量。在您的第一个示例中, series
中没有分配给 average
,因此它不被视为 average
的本地版本,因此使用来自封闭函数的版本。在第二个例子中,在 total
内部有对 count
和 average
的赋值,因此需要将它们标记为 nonlocal
以从封闭函数访问它们。 (否则你会得到一个 UnboundLocalError 因为 average
在第一次分配给它们之前尝试读取它们的值。)
关于python - 非本地关键字如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45135981/
10-12 21:18