首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当将下面的赋值操作(n1,n2 = n2,n1+n2 )分别拆分为n2 =n1+n2和n1=n2时,代码不能正常工作,为什么?

当将下面的赋值操作(n1,n2 = n2,n1+n2 )分别拆分为n2 =n1+n2和n1=n2时,代码不能正常工作,为什么?
EN

Stack Overflow用户
提问于 2022-01-19 17:04:47
回答 3查看 304关注 0票数 0

伙计们,我试着打印斐波纳契序列的前8个元素,只想理解一段代码。当在一行(n1,n2 = n2,n1+ n2 )中执行赋值操作时,代码工作得很好,但是当将相同的赋值操作分割成分隔行(n2 =n1+n2和n1=n2)时,我得到了不同的结果,并且代码不能以它应该的方式工作,请解释为什么?

代码语言:javascript
复制
def generate_fibonacci():
    n1 = 0
    n2 = 1
    while True:
        yield n1
        n1,n2 = n2, n1+ n2 // this piece of code doesn't work properly when separating it
        # n2 = n1 + n2
        # n1 = n2
        
seq = generate_fibonacci()

for i in range(8):
    print(next(seq))
EN

回答 3

Stack Overflow用户

发布于 2022-01-19 17:08:02

如果在n2之前更改了n1,那么n1将更改为n2的新值,而不是原始值,因此它们具有相同的值。

同样,首先更改n1会使n2的值不正确。

如果您想拆分代码,那么有两个选项。第一种方法在任何情况下都有效,并将一个变量的原始值存储在另一个变量中:

代码语言:javascript
复制
temp = n2
n2 = n1 + n2
n1 = temp

第二个选项只适用于这种情况,它是计算n1的be值,同时考虑到n2的值已经更改:

代码语言:javascript
复制
n2 = n1 + n2
n1 = n2 - n1
票数 0
EN

Stack Overflow用户

发布于 2022-01-19 17:20:34

代码语言:javascript
复制
n2 = n1 + n2
n1 = n2

使用此代码,n1n2都以相同的值结束--原始n1n2之和。

代码语言:javascript
复制
n1,n2 = n2, n1+ n2

使用此代码,n1n2的原始值结束,n2以原始n1n2的总和结束。

票数 0
EN

Stack Overflow用户

发布于 2022-01-19 17:24:12

当您执行n1,n2 = n2,n1+n2时,Python在执行赋值之前将右边的值存储在临时内存中。因此,在改变n1+n2之前计算n1 (从而避免了分配过程中的干扰)。

如果在两行中执行此操作,则会丢失其中一个变量的原始值。但是,由于fibonacci序列的性质,您可以对其进行补偿并检索原始值:

代码语言:javascript
复制
def generate_fibonacci():
    n1 = 0
    n2 = 1
    while True:
        yield n1
        n2=n1+n2  # n2 gets a new value
        n1=n2-n1  # recover original value of n2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70774799

复制
相关文章

相似问题

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