Python同时变量自增

3

目前,我正在尝试在Python中同时重新定义两个变量。例如,我有以下基本情况:

 p = 3
 q = 2

我希望您能重新定义p和q,使它们符合以下要求。
 p = p+2q

并且

 q = p+q

因此,p和q的元组应为(p,q) = (3,2),然后是(7,5),接着是(17,15),以此类推。我不确定如何同时重新定义这些变量。
当然,以下代码可以工作:
 p = 2
 q = 3
 temp = [0,0]

 while True:
    temp[0] = p + 2q
    temp[1] = p+q
    p = temp[0]
    q = temp[1]
    print(p,q)

但我希望避免使用 temp 列表。有没有更漂亮、更符合Python风格的方法来做到这一点?

3个回答

9
>>> p = 2
>>> q = 3
>>> p, q = p + 2 * q, p + q
>>> print p
8
>>> print q
5
>>> 

您也可以添加可选的括号:
(p, q) = (p + 2 * q, p + q)

是的,我总是喜欢加上括号,只是为了可读性。 - arshajii

5
请看下方代码:
p = 2
q = 3

while True:
    p, q = (p + 2*q, p + q)
    print(p, q)

1
p = p + 2*q
q = q + p - 2*q

这个方法应该可以运行


这样行吗?你有仔细检查过吗? - Pierre GM
较低的清晰度是其缺点,我认为这可能更适用于C或其他语言,其中元组方法不可用。 - jaypb
@BaylesJ 这不是关于清晰度的问题(在C中也行不通),这里当Python执行第二个语句时,p的值已经改变,现在q将根据新的p赋值。 - Ashwini Chaudhary
@PierreGM:我知道这很丑,而且顺序很重要。老实说,我不知道p,q =(f(p,q),g(p,q))可以在相同的环境中执行。我很高兴学到了新东西 :) - Krzysztof Voss
@AshwiniChaudhary,我认为在编辑后更清晰了:由于消除了添加到p的偏移量,此示例确实起作用(现在)。我只是认为正在发生的事情不太明显,所以即使它是正确的,在Python中我也不会这样做(其他语言可能)。 - jaypb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接