通过打印斐波纳契数列研究PYTHON连续赋值问题

  • A+

为了研究此问题,先打印一下1000以内的斐波那契数列,然后将循环语句中的变量赋值修改一下。

  1. #myproj1.py  
  2. # Fibonacci series: 斐波纳契数列  
  3. # 两个元素的总和确定了下一个数  
  4. In [1]: a,b=0,1  
  5. In [2]: while b<1000:  
  6.    ...:     print(b,end=',')  
  7.    ...:     a,b=b,a+b  
  8.    ...:  
  9. 1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,  

关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符

现在将上面的赋值语句调整一下,即将: a,b=b,a+b改成:

  1. a=b  
  2. b=a+b  

整个程序如下:

  1. # myproj2.py  
  2. In [4]: a=0  
  3. In [5]: b=1  
  4. In [6]: while b<1000:  
  5.    ...:     print(b,end=',')  
  6.    ...:     a=b  
  7.    ...:     b=a+b  
  8.    ...:  
  9. 1,2,4,8,16,32,64,128,256,512,  

输出的结果不是斐波那契数列,这是为什么?
下面我们研究一下PYTHON连续赋值的问题
在python中是可以使用连续赋值的方式来一次为多个变量进行赋值的

  1. In [9]: a=b=c=1  
  2.   
  3. In [10]: a=0;b=1  
  4.   
  5. In [11]: a,b,c=1,1,1  

上面的赋值很简单
再看这样一个例子

  1. In [12]: a=3  
  2. In [13]: a,b=1,a  
  3.   
  4. In [14]: a  
  5. Out[14]: 1  
  6.   
  7. In [15]: b  
  8. Out[15]: 3  

第13条中赋值后,a的值变为1,而b的值变为3,b的值不是1,这是为什么?

因为在连续赋值语句中等式右边其实都是局部变量,而不是真正的变量值本身,上面例子中右边的a,在python解析的时候,只是把变量a的指向的变量3赋给b,而不是a=1之后a的结果。

moonrong
  • 版权声明:本站原创文章,于2019年1月24日11:38:02,由 发表,共 868 字。
  • 版权声明: 本文由于2019年1月24日11:38:02 发表在 好派笔记,共 868 字。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: