【问题标题】:Simple variable initialization (PYTHON) [duplicate]简单变量初始化(PYTHON)[重复]
【发布时间】:2016-12-12 06:03:30
【问题描述】:

今天在编写斐波那契数所需的基本程序时,我遇到了以下情况,需要同时初始化两个变量 x 和 y。

原来是我写的

x=1
y=2
......
x = y
y = x+y

这显然不能同时初始化两者,因为 x 变为 2 导致 y 变为 4,这不遵循斐波那契数列。

它必须替换为以下内容(在搜索之前我不知道这是可能的):

x,y = y,x+y

因此这会产生正确的序列(x=2 和 y =3)

我的问题是为什么会这样?或者更具体地说,该行代码语法下的变量的内存分配发生了什么。我们是否告诉编译器在更改为 y 之前的值之前使用 x 的先前值更改 y=x+y?

感谢大家的帮助:)

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

    赋值语句x=y 和朋友们)中,Python 将总是在赋值之前完全评估语句的右侧。在这种情况下,逗号分隔的事物会自动评估为元组 (y, x+y)(2, 3)。然后它开始尝试分配它们 - 它看到有两件事要分配,还有两个值要从元组解包,此时它会按顺序正确分配它们 (first->first, second->second)

    【讨论】:

    • 不知道为什么你被否决了。这是一个完全正确的答案。
    【解决方案2】:

    此分配分部分进行。

    1. y, x+y 创建一个元组。
    2. 元组再次分解为两部分,通过元组解包分配给xy

    x+y 将在创建元组之前计算,这发生在赋值之前,因此它使用原始值。

    【讨论】:

    • 以几乎相同的答案击败我。 +1
    猜你喜欢
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 2015-03-10
    • 2019-04-28
    • 1970-01-01
    相关资源
    最近更新 更多