我试图从一个序列中解压缩一组电话号码,python shell 又会抛出一个无效的语法错误。我正在使用 python 2.7.1。这是片段
>>> record = ('Dave', 'dave@example.com', '773-555-1212', '847-555-1212')
>>> name, email, *phone-numbers = record
SyntaxError: invalid syntax
>>>
请解释。有没有其他方法可以做同样的事情?
我试图从一个序列中解压缩一组电话号码,python shell 又会抛出一个无效的语法错误。我正在使用 python 2.7.1。这是片段
>>> record = ('Dave', 'dave@example.com', '773-555-1212', '847-555-1212')
>>> name, email, *phone-numbers = record
SyntaxError: invalid syntax
>>>
请解释。有没有其他方法可以做同样的事情?
您在 Python 2 中使用 Python 3 特定的语法。
*
Python 2 中不提供在赋值中扩展可迭代解包的语法。
使用带有*
splat 参数解包的函数来模拟 Python 2 中的相同行为:
def unpack_three(arg1, arg2, *rest):
return arg1, arg2, rest
name, email, phone_numbers = unpack_three(*user_record)
或使用列表切片。
这种新语法是在 Python 3 中引入的。因此,它会在 Python 2 中引发错误。
相关 PEP:PEP 3132 -- 扩展的可迭代拆包
name, email, *phone_numbers = user_record
蟒蛇 3:
>>> a, b, *c = range(10)
>>> a
0
>>> b
1
>>> c
[2, 3, 4, 5, 6, 7, 8, 9]
蟒蛇2:
>>> a, b, *c = range(10)
File "<stdin>", line 1
a,b,*c = range(10)
^
SyntaxError: invalid syntax
>>>
该功能仅在 Python 3 中可用,另一种方法是:
name, email, phone_numbers = record[0], record[1], record[2:]
或类似的东西:
>>> def f(name, email, *phone_numbers):
return name, email, phone_numbers
>>> f(*record)
('Dave', 'dave@example.com', ('773-555-1212', '847-555-1212'))
但那是相当hacky IMO