首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python - fibonacci数

Python - fibonacci数
EN

Stack Overflow用户
提问于 2014-04-09 17:08:31
回答 3查看 642关注 0票数 0
代码语言:javascript
复制
def fibonacci(x):
    a=0
    b=1
    for i in range(x-1):
        b, a = a+b, b
    return b
 x = input ("Give me the number! ")
 print "The",x,". Fibonacci number: "
 print fibonacci (x)

因此,代码是完全工作的,但我不理解b,a=a+b,b行,那么这是做什么呢?:s

EN

回答 3

Stack Overflow用户

发布于 2014-04-09 17:12:14

Python支持几种不同形式的多重赋值。特别地,

代码语言:javascript
复制
>>> a = b = c = 1
>>> a
1
>>> b
1
>>> c
1

代码语言:javascript
复制
>>> a, b, c, *the_rest = list(range(10))
>>> a
0
>>> b
1
>>> c
2
>>> the_rest
[3, 4, 5, 6, 7, 8, 9]

所以你所拥有的相当于:

代码语言:javascript
复制
tmp = b
b = a+b
a = tmp
票数 1
EN

Stack Overflow用户

发布于 2014-04-09 17:10:57

类似于一个基本的交换成语,它基本上类似于执行以下操作:

代码语言:javascript
复制
tmp = b
b = a + b
a = tmp
票数 0
EN

Stack Overflow用户

发布于 2014-04-09 17:13:11

Python将右侧表达式与左侧赋值分隔开来。首先计算右边的值,然后将结果存储在堆栈上,然后使用重新从堆栈中获取值的操作码分配左边的名称。

代码语言:javascript
复制
>>> import dis
>>> def foo(a, b):
...     a, b = b, a
... 
>>> dis.dis(foo)
  2           0 LOAD_FAST                1 (b)
              3 LOAD_FAST                0 (a)
              6 ROT_TWO             
              7 STORE_FAST               0 (a)
             10 STORE_FAST               1 (b)
             13 LOAD_CONST               0 (None)
             16 RETURN_VALUE        

就像其他的拆包任务一样。

首先,创建一个由b和a的值组成的元组。然后这个元组被解压成a和b,有效地交换它们。

代码语言:javascript
复制
>>> a=5
>>> b=6
>>> a,b = b,a
>>> a
6
>>> b
5

现在使用这个属性生成Fibonacci序列。

来源:https://stackoverflow.com/a/21047622/1112163

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22969366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档