Sujet : Un code que j'ai mis du temps à comprendre De : ast (at) *nospam* invalid (ast) Groupes :fr.comp.lang.python Date : 07. Dec 2021, 10:49:21 Autres entêtes Organisation : Guest of ProXad - France Message-ID :<61af2e22$0$28605$426a34cc@news.free.fr> User-Agent : Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Thunderbird/91.3.2
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