• [^] # Re: quick python

    Posté par (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 :

    for l in sys.stdin:
     m, *q = l.split()
     if m == "noop":
     inc()
     else: # add
     inc()
     inc()
     X += int(*q)

    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à !