[英]Understanding Fibonacci number generator
我正在尝试了解此代码块中正在发生的事情
def enum(seq):
n = 0
for i in seq:
yield n, i
n += 1
def fibonacci():
i = j = 1
while True:
r, i, j = i, j, i + j
yield r
我对生成器的工作原理有一个大致的了解,只是对这条线感到困惑:
r, i, j = i, j, i +j
以及发生了什么。 谢谢。
这称为“元组分配”。
通常,您会遇到多个任务,例如
a = 1
b = 2
c = 3
可以改写为:
(a, b, c) = (1, 2, 3)
甚至像这样:
a, b, c = 1, 2, 3
如果要交换值:
a, b = b, a
是的,这也可以。
在您的情况下,一些交换和某些添加同时发生*。 r
是将要返回的值, i
是下一步将返回的值, j
之后将返回的值。 j
之后会返回什么? i + j
等。
这是一个标准的“拆箱分配”-计算右侧的三个值,然后将这些值绑定到左侧的位置(在这种情况下,它们都是简单的名称,但理论上它们可以是容器元素)手侧。 这种特殊情况大致相当于
r = i
i = j
j = i+j
但是请注意,在一般情况下,可以在一个语句中执行某些操作,而如果不使用临时变量,则无法安全地执行该操作。 经典的“交换两个变量”需要一个临时变量,例如
tmp = i
i = j
j = tmp
但是在python中,您可以使用
i, j = j, i
一切都会正常进行(tm)。
线
r, i, j = i, j, i+j
是序列解包语句。
令i = j = 1
。
i, j, i+j
并将其打包为元组(1, 1, 2)
1、2、1 (1, 1, 2)
。 r
, i
和j
,使得r = 1
, i = 1
和j = 2
。 在python文档 5.3节的末尾简要提到了这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.