什么时候使用非本地关键字?
When to use nonlocal keyword?
我不明白为什么我可以在这里使用系列变量:
def calculate_mean():
series = []
def mean(new_value):
series.append(new_value)
total = sum(series)
return total/len(series)
return mean
但是我这里不能使用count和total变量(赋值前引用的变量):
def calculate_mean():
count = 0
total = 0
def mean(value):
count += 1
total += value
return total/count
return mean
只有当我像这样使用非本地关键字时它才有效:
def calculate_mean():
count = 0
total = 0
def mean(value):
nonlocal count, total
count += 1
total += value
return total/count
return mean
我就是这样使用的 calculate_mean()
mean = calculate_mean()
print(mean(5))
print(mean(6))
print(mean(7))
print(mean(8))
你面临的是,在一种情况下,你在可变对象中有一个可变对象,并且你对该对象进行操作(当它是一个列表时) - 在另一种情况下,你正在对一个不可变对象进行操作对象并使用赋值运算符(增强赋值 +=
).
默认情况下,Python 定位所有 read 的非局部变量,然后相应地使用 - 但如果在内部范围内分配了一个变量,Python 假定它是局部变量(即内部函数的局部变量),除非它被显式声明为非局部变量。
我不明白为什么我可以在这里使用系列变量:
def calculate_mean():
series = []
def mean(new_value):
series.append(new_value)
total = sum(series)
return total/len(series)
return mean
但是我这里不能使用count和total变量(赋值前引用的变量):
def calculate_mean():
count = 0
total = 0
def mean(value):
count += 1
total += value
return total/count
return mean
只有当我像这样使用非本地关键字时它才有效:
def calculate_mean():
count = 0
total = 0
def mean(value):
nonlocal count, total
count += 1
total += value
return total/count
return mean
我就是这样使用的 calculate_mean()
mean = calculate_mean()
print(mean(5))
print(mean(6))
print(mean(7))
print(mean(8))
你面临的是,在一种情况下,你在可变对象中有一个可变对象,并且你对该对象进行操作(当它是一个列表时) - 在另一种情况下,你正在对一个不可变对象进行操作对象并使用赋值运算符(增强赋值 +=
).
默认情况下,Python 定位所有 read 的非局部变量,然后相应地使用 - 但如果在内部范围内分配了一个变量,Python 假定它是局部变量(即内部函数的局部变量),除非它被显式声明为非局部变量。