Python算法详解
上QQ阅读APP看书,第一时间看更新

2.2.5 将序列分解为单独的变量

在Python程序中,可以将一个包含N个元素的元组或序列分解为N个单独的变量。这是因为Python语法允许任何序列(或可迭代对象)通过简单的赋值操作分解为单独的变量,唯一的要求是变量的总数和结构要与序列相吻合。下面的实例文件fenjie.py演示了将序列分解为单独变量的过程。

源码路径:daima\第2章\xinghao.py

p = (4, 5)
x, y = p
print(x)
print(y)
data = [ 'ACME', 50, 91.1, (2012, 12, 21) ]
name, shares, price, date = data
print(name)
print(date)

执行结果如图2-14所示。

图2-14 执行结果

如果要分解未知或任意长度的可迭代对象,上述分解操作简直是为其量身定制。通常在这类可迭代对象中会有一些已知的组件或模式(例如,元素1之后的所有内容都是电话号码),利用“*”星号表达式分解可迭代对象后,使得开发者能够轻松利用这些模式,而无须在可迭代对象中做复杂操作就能得到相关的元素。

在Python程序中,星号表达式在迭代一个变长的元组序列时十分有用。下面的实例文件xinghao.py演示了分解一个带标记元组序列的过程。

records = [
     ('AAA', 1, 2),
     ('BBB', 'hello'),
     ('CCC', 5, 3)
]
def do_foo(x, y):
     print('AAA', x, y)
def do_bar(s):
     print('BBB', s)
for tag, *args in records:
     if tag == 'AAA':
           do_foo(*args)
     elif tag == 'BBB':
           do_bar(*args)
line = 'guan:ijing234://wef:678d:guan'
uname, *fields, homedir, sh = line.split(':')
print(uname)
print(homedir)

执行结果如图2-15所示。

图2-15 执行结果