马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在做第45课动动手作业 :斐波那契数列时发现一个问题:按老师的做法是正确的结果,如下程序:def fib():
num1 = 0
num2 = 1
def fun():
nonlocal num1,num2
temp = num1
num1,num2 = num2,num1+num2
print("temp=",temp,"num1=",num1,"num2=",num2)
return temp
return fun
而我做的是:
def fib():
num1 = 0
num2 = 1
def fun():
nonlocal num1,num2
temp = num1
num1 = num2
num2 = num1+num2
print("temp=",temp,"num1=",num1,"num2=",num2)
return temp
return fun
也就是把 老师的第七行 num1,num2 = num2,num1+num2 写成:
num1 = num2
num2 = num1+num2
得出的结果却是错的:
>>> f=fib()
>>> f()
temp= 0 num1= 1 num2= 2
0
>>> f()
temp= 1 num1= 2 num2= 4
1
>>> f()
temp= 2 num1= 4 num2= 8
2
>>>
老师的结果:
>>> f=fib()
>>> f()
temp= 0 num1= 1 num2= 1
0
>>> f()
temp= 1 num1= 1 num2= 2
1
>>> f()
temp= 1 num1= 2 num2= 3
1
>>>
各位大神,我到底哪里错了呢?
本帖最后由 isdkz 于 2023-2-15 21:14 编辑
因为 num1, num2 = num2, num1 + num2 会把右边的表达式的值放到一个暂存区域,
然后再从暂存区域里面取出值来分别给左边的变量,这是 python 内部机制自动完成的,
而你不要把它拆开的话就要用一个临时变量把值存起来,再从临时变量里面把值取出来,
在下面的代码种 temp 就是这个临时变量
temp = num1
num1 = num2
num2 = temp+num2
就像你要互换两个杯子里的水也不可能两个杯子互相倒一样,得有第三个杯子将其中一个杯子的水存起来,而这个 temp 就是第三个杯子
而在 num1,num2 = num2,num1+num2 中只不过是 python 自动帮你完成了值的暂存
|