使用父函数的set变量可以工作,但不能使用int变量

时间:2018-08-12 12:17:58

标签: python python-3.x

我知道在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 关键字,则会收到错误消息。

为什么会这样?为什么集合不同?

0 个答案:

没有答案