|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- >>> 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两个变量已经在内存中,所以就直接使用并进行了修改。
说得对
nonlocal back1, back2说明不是内层函数的变量
|
|