Le premier point, d'utiliser for l in sys.stdin permet de ne pas lire tout l'input, mais simplement d'itérer sur les lignes, on reste plus bas en RAM, on traite un flux.
Le second point, c'est d'utiliser *q pour prendre « ce qui reste ».
Dans le cas d'une ligne "noop" on a m="noop" et q=[].
Dans le cas de "addx XX" on a m="addx" et q=[XX], une list avec la valeur en premier (et unique) élément.
Mais en refilant *q à int, il « unpack » et int(*q) devient équivalent à int(XX).
Avec ça tu gères des instructions différentes, avec autant de paramètres que tu veux, tu t'en fous au niveau du parsing, tu veux juste connaître l'instruction et passer le reste à la gestion de l'instruction.
Ça évite de rajouter un argument factice, et de splitter en ne prenant que les deux premiers.
Yth.
PS: et aussi, chapeau pour la maîtrise d'awk, j'en suis pas là !
[^] # Re: quick python
Posté par Yth (Mastodon) . En réponse au message Avent du Code, jour 10. Évalué à 4. Dernière modification le 10 décembre 2022 à 15:14.
Tu peux simplifier un peu ta gestion des input en faisant ça :
Le premier point, d'utiliser
for l in sys.stdinpermet de ne pas lire tout l'input, mais simplement d'itérer sur les lignes, on reste plus bas en RAM, on traite un flux.Le second point, c'est d'utiliser *q pour prendre « ce qui reste ».
Dans le cas d'une ligne "noop" on a m="noop" et q=[].
Dans le cas de "addx XX" on a m="addx" et q=[XX], une list avec la valeur en premier (et unique) élément.
Mais en refilant *q à int, il « unpack » et int(*q) devient équivalent à int(XX).
Avec ça tu gères des instructions différentes, avec autant de paramètres que tu veux, tu t'en fous au niveau du parsing, tu veux juste connaître l'instruction et passer le reste à la gestion de l'instruction.
Ça évite de rajouter un argument factice, et de splitter en ne prenant que les deux premiers.
PS: et aussi, chapeau pour la maîtrise d'awk, j'en suis pas là !