2011-08-25 27 views
1

我是新来的Python,我想了解这句法:新的Python试图了解语法

a, b = b, a + b 
+1

它被称为[平行分配](http://en.wikipedia.org/wiki/Assignment_(computer_science)#Parallel_assignment)。 – miku

+0

@miku:Neato - 我已经使用过这种技术很多次了,但没有意识到它有一个正式的术语。 – Gerrat

+0

哈哈。这就像面试问题。我希望没有人真的写上面的代码,但是,我想,可能我会。至少,真正的变量名称会更有意义。 – morningstar

回答

1

,我们可以把这个给:(a, b) = (b, a + b)

考虑到a = 3b = 6

(b, a + b)返回一个元组(6, 9)这些值分配给列出的变量(a, b),并指定(a = 6, b = 9)操作。

所以最终值是a = 6b = 9

1

Python有一次传输多个值的能力。这意味着“将a设为b,将b设为a和b的和”。

有一个更全面的解释here

+0

链接已经死了,你的意思是不同的页面可能吗? –

+0

@ShadowWizard没有。我的意思是,当我写它。不幸的是,该链接已经移动,但你仍然可以通过wayback机器找到它:http://web.archive.org/web/20100419171004/http://diveintopython.org/getting_to_know_python/multiple_values.html – cwallenpoole

+0

奇怪的是,所有其他链接在新域中仍然存在 –

1

a给出的b和b的值被给予更多的技术说明可发现here

0

a+b

A的值,是与tuple-decomposition(或序列拆包)的分配和也可能被称为多重任务语句

RIGHT上的元组评估为然后结果被指定为槽的时隙到左边的变量。 (左边是不是真的即使语法使它看起来像一个。一个元组)

所以,

a = 1 
b = 2 
a, b = b, a + b 
// a, b = 2, 1 + 2 
// a, b = 2, 3 
// a = 2 
// b = 3 

编码愉快。

1

这是一个称为'unpacking'的python特征的语法糖。这实际上意味着:

(a, b) = (b, a + b) # This is also valid syntax 

创建了元组(b, a + b),锁定值。然后,将这些值分段分配给元组(a,b)中的标识符。由于值在分配开始之前被锁定,因此每个值都取得期望值。这个想法来源于Haskell中的模式匹配。

1

这被称为序列拆包。右侧被打包成一个元组(因为逗号)。 Python包然后评估右侧,然后将这些值解包到左侧。

请参阅Tuples and Sequences