2013-05-15 40 views
12

我想從一個序列中解壓縮一組電話號碼,python shell反過來會拋出一個無效的語法錯誤。我正在使用python 2.7.1。這裏是摘錄Python語音表達式的無效語法

>>> record = ('Dave', '[email protected]', '773-555-1212', '847-555-1212') 
>>> name, email, *phone-numbers = record 
SyntaxError: invalid syntax 
>>> 

請解釋。有沒有其他的方式來做同樣的事情?

回答

12

這個新的語法是introduced in Python 3。因此,它會在Python引發錯誤2.

相關PEP:PEP 3132 -- Extended Iterable Unpacking

name, email, *phone_numbers = user_record 

的Python 3:

>>> a, b, *c = range(10) 
>>> a 
0 
>>> b 
1 
>>> c 
[2, 3, 4, 5, 6, 7, 8, 9] 

的Python 2:

>>> a, b, *c = range(10) 
    File "<stdin>", line 1 
    a,b,*c = range(10) 
     ^
SyntaxError: invalid syntax 
>>> 
15

您正在使用Python 3 Python 2中的特定語法。

*語法擴展迭代中分配拆包不是在Python 2.

可用參見Python 3.0, new syntaxPEP 3132

使用與*圖示的說法拆包,以模擬在Python 2相同的行爲的函數:

def unpack_three(arg1, arg2, *rest): 
    return arg1, arg2, rest 

name, email, phone_numbers = unpack_three(*user_record) 

或使用列表分片。

7

該功能僅在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', '[email protected]', ('773-555-1212', '847-555-1212')) 

,但是這是非常哈克IMO