Sujet : Re: Un code que j'ai mis du temps à comprendre
De : nicolasp (at) *nospam* aaton.com (Nicolas)
Groupes : fr.comp.lang.pythonDate : 08. Dec 2021, 09:42:04
Autres entêtes
Organisation : Guest of ProXad - France
Message-ID : <61b061ca$0$5000$426a74cc@news.free.fr>
References : 1
User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.3.2
Le 07/12/2021 à 10:49, ast a écrit :
Trouvez ce que fait le code suivant ?
(sans l'éxécuter bien sur)
>>> n = 3
>>> x = range(n ** 2),
>>> xn = list(zip(*[iter(x)] * n))
>>> xn
Réponse:
Tout d'abord dans le *[iter(x)] * n c'est la
2ème étoile (multiplication) qui est prioritaire
sur la 1ère (splash), ça n'a rien d'évident
On se retrouve donc avec:
[iter(x), iter(x), iter(x)]
mais c'est le même objet itérateur qui est répété
3 fois, équivalent à it = iter(x) puis [it, it, it]
après list(zip(it, it, it))
-> [(0, 1, 2), (3, 4, 5), (6, 7, 8)]
la fonction réalisée est donc un "tronçonnage" de x
C'est "malin" mais c'est très très moche.
Les codes incompréhensibles comme ça, c'est bien pour le fun mais en production...