python 解压可迭代对象给多个变量

来源:互联网 发布:购买备案域名注意事项 编辑:程序博客网 时间:2024/05/16 19:06

如果一个可迭代对象的元素个数超过变量个数时,会抛出一个ValueError。那么怎样才能从这个可迭代对象中解压出N个元素出来?


Python 提供“*”号表达式解决该问题

#示例1>>> record = ('Dave', 'dave@example.com', '773-555-1212', '847-555-1212')>>> name, email, *phone_numbers = record>>> name'Dave'>>> email'dave@example.com'>>> phone_numbers['773-555-1212', '847-555-1212']>>>#示例2>>> *trailing, current = [10, 8, 7, 1, 9, 5, 10, 3]>>> trailing[10, 8, 7, 1, 9, 5, 10]>>> current3 #示例3records = [('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) #示例4>>> line = 'nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false'>>> uname, *fields, homedir, sh = line.split(':')>>> uname'nobody'>>> homedir'/var/empty'>>> sh'/usr/bin/false'>>> #示例5#有时候,你想解压一些元素后丢弃它们,你不能简单就使用 * ,但是你可以使用一个普通的废弃名称,比如_或者_ign >>> record = ('ACME', 50, 123.45, (12, 18, 2012))>>> name, *_, (*_, year) = record>>> name'ACME'>>> year 2012