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
3 Réponses :
lire ceci p>
https://pythontaps.com/2013/ 09/29 / The-Python-Rendement-Cadre-Mot-clé - expliqué / P>
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). P>
Le rendement ne renvoie qu'une seule valeur à la fois. Vous devez appeler le rendement autant de fois que la longueur de votre liste p>
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.
Aucune version du code n'a beaucoup de sens pour moi. Vous voulez rarement à mélanger les instructions code> Retour code> avec les instructions code> de rendement code> dans la même fonction, car
retour code> ne fonctionne pas normalement dans un générateur.
Qu'est-ce que
x code> 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 () code> en ce qui est clairement une faute de frappe.
Tout est question de boxe et de mordre dans les commentaires?