2012-06-10 25 views
7

Làm thế nào nó hoạt động dưới mui xe? Tôi không hiểu lý do cho những sai lầm dưới đây:python: khi nào tôi có thể giải nén trình tạo?

>>> def f(): 
...  yield 1,2 
...  yield 3,4 
... 
>>> *f() 
    File "<stdin>", line 1 
    *f() 
    ^
SyntaxError: invalid syntax 
>>> zip(*f()) 
[(1, 3), (2, 4)] 
>>> zip(f()) 
[((1, 2),), ((3, 4),)] 
>>> *args = *f() 
File "<stdin>", line 1 
    *args = *f() 
    ^
SyntaxError: invalid syntax 
+0

Bạn đang tìm kiếm ['itertools.consume'] (http://docs.python.org/library/itertools.html#recipes)? – katrielalex

+0

Tôi nghĩ rằng anh ta có thể đang tìm kiếm 'list (f())' hoặc 'tuple (f())'. –

+0

Xin lỗi, tôi muốn biết cách hoạt động của * Máy phát điện và nơi bạn có thể sử dụng nó. –

Trả lời

9

Cú pháp *iterable chỉ được hỗ trợ trong danh sách đối số của cuộc gọi hàm (và trong định nghĩa hàm).

Trong Python 3.x, bạn cũng có thể sử dụng nó ở phía bên trái của một bài tập, như thế này:

[*args] = [1, 2, 3] 

Sửa: Lưu ý rằng có plans to support the remaining generalisations.

1

Hai lỗi đang hiển thị cùng một điều: bạn không thể sử dụng * ở phía bên trái của một biểu thức.

Tôi không chắc chắn những gì bạn đang mong đợi xảy ra trong những trường hợp đó, nhưng nó không hợp lệ.

4

Chạy điều này trong Python 3 cung cấp một thông báo lỗi mô tả hơn.

>>> *f() 
SyntaxError: can use starred expression only as assignment target 
Các vấn đề liên quan