Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.lang.python > #3474

Re: « Factoriser » un paramètre

From Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid>
Newsgroups fr.comp.lang.python
Subject Re: « Factoriser » un paramètre
Date 2021-04-11 19:59 +0200
Organization Université de Strasbourg
Message-ID <87im4s8zyy.fsf@universite-de-strasbourg.fr.invalid> (permalink)
References <s4utdp$335$1@cabale.usenet-fr.net>

Show all headers | View raw


Olivier Miakinen <om+news@miakinen.net> writes:

> Dans une classe j'ai la méthode suivante. Peu importe le détail de ce
> qu'elle fait, le point important est tous ces « print » avec le paramètre
> « file=file ».
>
>     def print(self, indent=0, *, file=sys.stdout):
>         """Imprime un filtre auto-indenté"""
>         print("    "*indent, end="", file=file)
>         if self.neg: print("!", end="", file=file)
>         if (self.t == "RE"):
>             print(f"{self.key} /{self.regex.pattern}/", file=file)
>         else:
>             print(self.t, file=file)
>             for subf in self.subs: subf.print(indent+1, file=file)
>
> Ma question : y a-t-il un moyen de « factoriser » ce paramètre, avec une
> syntaxe du style « with file=file », de façon à pouvoir le supprimer de
> tous les appels à la fonction print() ?

Il n'y a pas vraiment de solution pour cela, sauf à définir une fonction
locale :

     def print(self, indent=0, *, file=sys.stdout):
         def pr (*p, **k): print (*p, **k, file=file)
         ...

et utiliser pr (...) dans la suite (j'ai pas essayé, hein, cela dépend
peut-être de la version de python pour l'ajout de "file=file" après **k).


Une autre solution est de rediriger sys.stdout, ce qui est peut-être le
plus simple si c'est applicable. Voir 

https://docs.python.org/3/library/contextlib.html#contextlib.redirect_stdout

> [
> Question subsidiaire : comment traduire au mieux le sens de « print » dans
> le commentaire au début de ma fonction ? Je n'ai pas l'impression que le
> terme « imprime » ni le terme « affiche » ne conviennent dans tous les cas.
> ]

J'utilise "afficher" en général, parce qu'imprimer m'évoque
immanquablement le papier...

-- Alain.

Back to fr.comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

« Factoriser » un paramètre Olivier Miakinen <om+news@miakinen.net> - 2021-04-11 15:26 +0200
  Re: « Factoriser » un paramètre Benoit Izac <use.reply.to@INVALID.ADDRESS> - 2021-04-11 19:27 +0200
    Re: « Factoriser » un paramètre Olivier Miakinen <om+news@miakinen.net> - 2021-04-11 20:40 +0200
      Re: « Factoriser » un paramètre Benoit Izac <use.reply.to@INVALID.ADDRESS> - 2021-04-11 21:40 +0200
        Re: « Factoriser » un paramètre Olivier Miakinen <om+news@miakinen.net> - 2021-04-11 22:04 +0200
  Re: « Factoriser » un paramètre Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2021-04-11 19:59 +0200
    Re: « Factoriser » un paramètre Olivier Miakinen <om+news@miakinen.net> - 2021-04-11 20:51 +0200

csiph-web