Tuple Packing and Unpacking
- 元祖是一种序列的类型,除了不可变之外,和列表很相似。当使用多个值和变量的时候,Python会自动在元祖之间进行打包和拆包,简化了程序。python在所用需要用到多个单值的时候都可以用多个逗号表达式来分隔,这样会自动打包成元祖。
julia = ("Julia", "Roberts", 1967, "Duplicity", 2009, "Actress", "Atlanta, Georgia")
# or equivalently
julia = "Julia", "Roberts", 1967, "Duplicity", 2009, "Actress", "Atlanta, Georgia"
print(julia[4])
得到结果:
2009
如果想要得到输出Atlanta,georgia也可以写:print(Julia[-1])[-1]会选择序列中的最后一项。
- 函数可以返回元祖作为返回值。比如,我们可以创建函数返回圆的周长和半径
def circleInfo(r):
""" Return (circumference, area) of a circle of radius r """
c = 2 * 3.14159 * r
a = 3.14159 * r * r
return (c, a)
print(circleInfo(10))
- Python具有非常强大的元组分配功能,这个功能允许从赋值语句右侧的元组为赋值语句左侧的变量名元组分配值。 另一种思考方式是将值的元组拆包到变量名中。
julia = "Julia", "Roberts", 1967, "Duplicity", 2009, "Actress", "Atlanta, Georgia"
name, surname, birth_year, movie, movie_year, profession, birth_place = julia
这等效于七个赋值语句,所有这些都在同一行上。 但是有一个要求是,左边变量的数量必须与元组中元素的数量匹配。
有时,交换两个变量的值很有用。 对于传统的赋值语句,我们必须使用一个临时变量。 例如,交换a和b:
a = 1
b = 2
(a, b) = (b, a)
print(a, b)
左边是变量的元组; 右侧是值的元组。 每个值都分配给其各自的变量。 右边的所有表达式都在任何赋值之前求值。 此功能使元组分配相当灵活。
当然,左边的变量数和右边的值数必须相同。
def circleInfo(r):
""" Return (circumference, area) of a circle of radius r """
c = 2 * 3.14159 * r
a = 3.14159 * r * r
return c, a
print(circleInfo(10))
circumference, area = circleInfo(10)
print(circumference)
print(area)
circumference_two, area_two = circleInfo(45)
print(circumference_two)
print(area_two)
这样可以将函数值集中命名给参数。
- Unpacking Into Iterator Variables
遍历元组或列表的列表时,带拆包的多重分配特别有用。
例如,字典由键值对组成。 当您在字典上调用items()方法时,您会得到一系列键值对。 这些对中的每对都是一个两个项的元组。
d = {"k1": 3, "k2": 7, "k3": "some other value"}
for p in d.items():
print("key: {}, value: {}".format(p[0], p[1]))