我猜想你的困惑可能是为什么:bar hello结果没有出现?
因为你的records第二项写错了: ('batr', 'hello') 应该是 ('bar', 'hello'),
In [1]: records =[
...: ('foo', 1, 2),
...: ('bar', 'hello'),
...: ('foo', 3 ,4),
...: ]
...: def do_foo(x,y):
...: print('foo', x ,y)
...:
...: def do_bar(s):
...: print('bar', s)
...:
...: for tag, *args in records:
...: if tag == 'foo':
...: do_foo(*args)
...: elif tag == 'bar':
...: do_bar(*args)
...:
foo 1 2
bar hello
foo 3 4
简单的解释就是:
*arg分解tag后面的几个元素,
比方说列表record中的三个元素分别是:('foo', 1, 2) ('bar', 'hello') ('foo', 3 ,4)
tag为'foo',后面的元素(1,2)为 *args,因此打印 foo 1 2
tag为'bar',后面的元素'hello'为*args,因此打印 bar hello
tag为'foo',后面的元素(3,4)为*args,因此打印 foo 3 4