2013-05-15 19 views
12

Tôi đang cố gắng giải nén tập các số điện thoại khỏi một chuỗi, trình bao python sẽ ném một lỗi cú pháp không hợp lệ. Tôi đang sử dụng python 2.7.1. Đây là đoạn mãCác biểu thức được gắn dấu sao cú pháp cú pháp không hợp lệ

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

Vui lòng giải thích. Có cách nào khác để làm tương tự không?

Trả lời

12

Cú pháp mới này là introduced in Python 3. Vì vậy, nó sẽ gây lỗi trong Python 2.

PEP liên quan: 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

Bạn đang sử dụng Python 3 cú pháp cụ thể bằng Python 2.

Cú pháp * cho mở rộng có thể lặp lại giải nén trong các bài tập không có sẵn bằng Python 2.

Xem Python 3.0, new syntaxPEP 3132.

Sử dụng một hàm với * luận splat giải nén để mô phỏng các hành vi tương tự trong Python 2:

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

name, email, phone_numbers = unpack_three(*user_record) 

hoặc sử dụng danh sách cắt.

7

Đó chức năng chỉ có sẵn bằng Python 3, một sự thay thế là:

name, email, phone_numbers = record[0], record[1], record[2:] 

Hoặc một cái gì đó như:

>>> def f(name, email, *phone_numbers): 
     return name, email, phone_numbers 

>>> f(*record) 
('Dave', '[email protected]', ('773-555-1212', '847-555-1212')) 

nhưng đó là khá hacky IMO