0

我知道Python有一个强大的多任务功能,例如。我们可以做Python中如何实现多重赋值?

a, b = 1, 2 
a, (b, c) = 1, (2, 3) 

甚至

for a, (b, c) in [(1, (2, 3)), ]: 
    print a, b, c 

但是这是怎么实现的?它是一个语法糖还是更复杂的东西?

回答

1

如果你想挖掘它的细节,但它实际上适用于右侧任何迭代,并且约束条件是指定的变量数必须与迭代中的元素。我不会把它称为语法糖,因为它确实在运行时发生 - 它不会以某种方式提前将它神奇地转换为一系列单独的赋值语句。

0

Tuple Assignment from "how to think like a computer scientist"

这帮助了我很多,当我试图了解蟒蛇,它解释了有关的元组分配以及如何认为的包/解包(不必是元组,只要左手边是分配和右手边迭代器)

list = [0]*3 [list[0],list[1],list[2]] = {1:1,2:2,3:3} list is now "[1,2,3]"

你可能已经知道这一点,但是这只是为了完整, 元组的分配方法也适用于功能:

a,b,c = function_return_a_three_tuple() 

所以在Python函数可能看起来像他们可以返回多个值,但其虚假声称,他们简单地返回一个元组和元组分配使得看起来像功能蟒蛇是更强大的,其他语言。

+0

但为什么它被称为元组赋值?原因''a,b = [1,2]''也是合法用法。 – kxxoling

+0

你说得对。我不知道它叫什么名字,只是因为它是在**元组**中引入的。但是这个名字并不是一个大问题,因为人们也称'a =(1,2,3)'变量赋值。在其他情况下,元组没有赋值,因为它们是不可变的:) – watashiSHUN