zpm 发表于 2020-6-6 17:50:13

小白发问:这两种表达为什么会导致不同的结果???

第一种:
>>> def funx():
                x = 5
                def funy():
                        nonlocal x
                        x += 1
                        return x
                return funy

>>> a = funx()
>>> a()
6
>>> a()
7
>>> a()
8
第二种:
>>> def funx():
                x = 5
                def funy():
                        nonlocal x
                        x += 1
                        return x
                return funy()

>>> a = funx()
>>> a
6
>>> a
6
>>> a
6

Twilight6 发表于 2020-6-6 17:54:42

第一种返回的是 一个 函数也就是 a = funx() 因为 funx() 返回的是 funy 所以 a = funy

然后每次a() 都是相当于在调用 funy()所以 每次都会 x += 1 导致x 每次增大 1

第二种 funx() 返回的是 funy()而 funy() 返回的是 x = 6

所以当你 a = funx() 就相当于 a = funy()又因为funy()返回的是x   , x 又等于6 所以 funy() = 6

所以每次调用都是一个固定的值 6

zpm 发表于 2020-6-6 17:59:57

Twilight6 发表于 2020-6-6 17:54
第一种返回的是 一个 函数也就是 a = funx() 因为 funx() 返回的是 funy 所以 a = funy

然后每次a() ...

哦哦明白啦!谢谢大神!
页: [1]
查看完整版本: 小白发问:这两种表达为什么会导致不同的结果???