wbzxz 发表于 2024-7-13 07:31:35

请问这样理解对吗?

>>> def fib():
...     back1, back2 = 0, 1
...     def func():
...         nonlocal back1, back2
...         temp = back1
...         back1, back2 = back2, back1 + back2
...         return temp
...     return func
...
>>> f = fib()
>>> f()
0
>>> f()
1
>>> f()
1
>>> f()
2
>>> f()
3
>>> f()
5
>>> f()
8
>>> f()
13
>>> f()
21

我对上面代码运行的理解,对吗?

1. f = fib()
这条语句运行时,执行了这条语句 back1, back2 = 0, 1,然后返回了一个函数func(),这时候把back1,back2两个变量放到了内存中。

2. f()
这条语句执行时,只执行func()函数内部的语句,不再执行back1, back2 = 0, 1,但是由于back1和back2两个变量已经在内存中,所以就直接使用并进行了修改。

某一个“天” 发表于 2024-7-13 10:32:34

说得对
nonlocal back1, back2说明不是内层函数的变量

smallwh 发表于 2024-7-13 12:05:43

理解正确
f 就是 func 函数了。nonlocal back1, back2 就意味着是从 fib 中找到的变量。

wbzxz 发表于 2024-7-13 22:25:44

某一个“天” 发表于 2024-7-13 10:32
说得对
nonlocal back1, back2说明不是内层函数的变量

谢谢您的指点。

wbzxz 发表于 2024-7-13 22:26:51

smallwh 发表于 2024-7-13 12:05
理解正确
f 就是 func 函数了。nonlocal back1, back2 就意味着是从 fib 中找到的变量。

非常感谢您的指点。

某一个“天” 发表于 2024-7-13 23:26:32

wbzxz 发表于 2024-7-13 22:26
非常感谢您的指点。

给个最佳呗~
页: [1]
查看完整版本: 请问这样理解对吗?