csomag / kicsomagolni generátor

szavazat
4

Van egy két generátor. Először generátor néha meg kell hívnia a második generátort és így vissza értékeket kapta onnan:

def a():
    for _b in b():
        yield _b

def b():
    yield 1
    yield 2

for _a in a():
    print _a

Van egy elegáns módja ennek:

for _b in b():
    yield _b

Megpróbáltam ezt:

yield *b()

De biztosan nem működik. Van Python 2.6.

A kérdést 12/06/2011 13:27
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
2

Nos, ebben az egyszerű példát, akkor csak írj a = bvagy a = lambda: b. De ha ahozzáadja elemeit saját, akkor itertools.chain :

import itertools
def a():
  return itertools.chain(['a-value'], b())

Tartsuk szem előtt, hogy bár ez a változat rövidebb is lehet, for: yieldegy elég intuitív (és ezért könnyen érthető) mintát.

Válaszolt 12/06/2011 13:32
a forrás felhasználó

szavazat
6

Azt hiszem, értem PEP380 . Ez ről Python 3.3 . Úgy néz ki:

 yield from b()

Nincs külön szintaxist hogy python2. Te csak használni a hurok.

A afunkciót a kérdés valójában teljesen felesleges. Lehet csak használni bbenne helye.

Válaszolt 12/06/2011 13:36
a forrás felhasználó

szavazat
3

Használhatja a generátor kifejezést. Arról van szó, mint tömör, mint a hurok, és ez azt jelzi, hogy a kód elsősorban előállítására visszatérési érték helyett mellékhatás.

def a():
    return (_b for _b in b())

Ahogy phihag azt mondta, akkor valószínűleg egyszerűen írni a = b, ha a kód is nagyon szeretem ezt a példát, mert a és b visszatér ugyanabban a sorrendben.

Válaszolt 12/06/2011 13:37
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more