2012-06-10 33 views
7

Kaputun altında nasıl çalışır?python: Jeneratörü ne zaman açabilirim?

>>> 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

Eğer arıyorsunuz [ 'itertools.consume'] (http://docs.python.org/library/itertools.html#recipes)? – katrielalex

+0

Sanırım liste (f()) veya tuple (f()) 'yi arıyor olabilir. –

+0

Maalesef, * Jeneratörün nasıl çalıştığını ve onu nerede kullanabileceğinizi öğrenmek istemekteydim. –

cevap

9

*iterable sözdizimi yalnızca bir işlev çağrısının (ve işlev tanımlarında) bir argüman listesinde desteklenir. Python 3.x ise

, ayrıca böyle bir atamanın sol taraftaki kullanabilirsiniz:

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

Düzenleme: plans to support the remaining generalisations olduğunu unutmayın.

1

iki hatalar aynı şeyi gösteriyor: Aşağıda hataların nedenini anlamıyorum sen bir ifadenin sol taraftaki * kullanamazsınız.

Bu durumlarda ne olmasını beklediğinizden emin değilim, ancak geçerli değil.

4

Bunu Python 3'te çalıştırmak daha açıklayıcı bir hata iletisi verir.

>>> *f() 
SyntaxError: can use starred expression only as assignment target 
İlgili konular