1.11. 一次赋多值

Python中比较“酷”的一种编程简写是使用序列来一次给多个变量赋值。

例 1.26. 一次赋多值

>>> v = ('a', 'b', 'e')
>>> (x, y, z) = v 1
>>> x
'a'
>>> y
'b'
>>> z
'e'
1 v 是一个三元素的元组,并且 (x, y, z) 是一个三变量的元组。将一个元组赋值给另一个元组,会按顺序将 v 的每个值赋值给每个变量。

这种用法有许多种用途。我经常想要将一定范围的值赋给几个变量。在C语言中,可以使用 enum 类型,手工列出每个常量和其所对应的值,当值是连续的时候这一过程让人感到特别繁琐。在Python中,你可以使用内置的 range 函数,和多变量赋值来快速进行赋值。

例 1.27. 连续值赋值

>>> range(7)                                                                    1
[0, 1, 2, 3, 4, 5, 6]
>>> (MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7) 2
>>> MONDAY                                                                      3
0
>>> TUESDAY
1
>>> SUNDAY
6
1

这个内置的 range 函数返回一个整数的列表。在使用最简化的调用形式,这个函数接收一个上限,然后返回一个初始值从0开始的列表,它依次递增,直到但不包括上限。(如果你愿意,你可以传入其它的参数来指定一个非 0 的初始值和非 1 的步长。可以使用 print range.__doc__ 来了解更多的细节。)

2 MONDAYTUESDAYWEDNESDAYTHURSDAYFRIDAYSATURDAY,和 SUNDAY 是我们定义的变量。(这个例子是从 calendar 模块中来的。它是一个很有趣的小模块,象UNIX程序 cal。这个 calendar 模块定义了星期每天的整数常量。)
3 现在每个变量都拥有了自已的值:MONDAY0TUESDAY1,等等。

你也可以使用多变量赋值来创建返回多个值的函数,只要返回一个包括所有值的元组就行了。调用者可以将其视为一个元组,或将值赋给独立的变量。许多标准的Python库是这样做的,包括 os 模块(我们将在第三章中对其进行讨论)。

进一步阅读