limee 发表于 2023-2-2 12:18:47

零基础入门学习python第45讲_闭包作业_斐波那契数列

请问为什么这个斐波那契数列不是从1开始打印啊
temp = back1; 但是back1在下一行代码不是已经变成back2了嘛,请问为什么不是从1开始打印呢

def fib():
    back1, back2 = 0, 1

    def func():
      nonlocal back1, back2
      temp = back1
      back1, back2 = back2, back1 + back2
      return temp
   
    return func
f = fib()

比如下面这个闭包的例子,a()就是从6开始打印{:5_104:}

def funX():
    x = 5
    def funY():
      nonlocal x
      x += 1
      return x
    return funY

a = funX()
a()

isdkz 发表于 2023-2-2 12:25:13

back1 变成 back2?准确的说是 back1 获得 back2 的值

temp 获得的值是在 back1 没有得到 back2 的值之前的,所以 temp 的值跟 back1 得到 back2 的值有什么关系呢?

jhq999 发表于 2023-2-2 23:25:15

def fib(n):
    back1, back2 = 0, 1

    def func():
      nonlocal back1, back2,n
      if 0==n:
            return back1
      temp = back1
      back1, back2 = back2, temp + back2
      n-=1
      return func()
    return func

fib(8)()
21
页: [1]
查看完整版本: 零基础入门学习python第45讲_闭包作业_斐波那契数列