我知道在Python 3中,如果我们在函数f1的主体中定义了一个函数f2,则除非我们使用非本地语句,否则无法在f2的主体中修改在f1的主体中在f2之前定义的变量。 。但是我发现对于设置变量似乎并非如此,如在本示例中可以看到的:
class MyClass():
def met(self, a):
a += 1
print('a = ', a)
b = {'foo'}
print('b = ', b)
def f1():
b.add('bar')
def f2():
nonlocal a
a += 10
f1()
print('b = ', b)
f2()
print('a = ', a)
然后使用
my_class = MyClass()
my_class.met(1)
会产生
a = 2
b = {'foo'}
b = {'foo', 'bar'}
a = 12
请注意,如果我在funct2中删除了 nonlocal 关键字,则会收到错误消息。
为什么会这样?为什么集合不同?