-1
votes

Comment comprendre les générateurs imbriqués dans Python?

J'ai ce code:

def flat_on_level(it, d=-1, level=None):
    """
    >>> list(flat_on_level([[[['a']]]], level=3))
    [['a']]

    """
    if d == -1:
        return list(flatt_on_level(it, d=d + 1, level=level))

    if d == level:
        return (i for i in [it])

    res = []
    for x in it:
        res.extend( flat_on_level(x, d=d+1, level=level))
    return res


4 commentaires

Aucune version du code n'a beaucoup de sens pour moi. Vous voulez rarement à mélanger les instructions Retour avec les instructions de rendement dans la même fonction, car retour ne fonctionne pas normalement dans un générateur.


Qu'est-ce que x dans cette dernière ligne et comment la fonction est-elle censée fonctionner? C'est assez absurde comme il est maintenant


Votre deuxième fonction a un appel à flatt_on_level () en ce qui est clairement une faute de frappe.


Tout est question de boxe et de mordre dans les commentaires?


3 Réponses :


1
votes

lire ceci

https://pythontaps.com/2013/ 09/29 / The-Python-Rendement-Cadre-Mot-clé - expliqué /

Fondamentalement, vous auriez besoin d'itérale à travers la deuxième version pour obtenir le même effet que d'appeler le premier (qui a un générateur).


0 commentaires

2
votes

Le rendement ne renvoie qu'une seule valeur à la fois. Vous devez appeler le rendement autant de fois que la longueur de votre liste


0 commentaires

0
votes

Si ok, sans l'aide de la grande astuce que j'ai eue à cela. Il semble être un beau générateur. Ma question était plus sur la tactique reformulant la fonction, que l'on peut céder à une liste à plat, que ce que j'ai faussé dans du béton. XXX


0 commentaires