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


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

Re: « Factoriser » un paramètre

Path csiph.com!pi2.pasdenom.info!news.izac.org!reader
From Benoit Izac <use.reply.to@INVALID.ADDRESS>
Newsgroups fr.comp.lang.python
Subject Re: « Factoriser » un paramètre
Date Sun, 11 Apr 2021 19:27:19 +0200
Message-ID <87y2dou3yg.fsf@izac.org> (permalink)
References <s4utdp$335$1@cabale.usenet-fr.net>
Reply-To benoit.izac@free.fr
Mime-Version 1.0
Content-Type text/plain; charset=utf-8
Content-Transfer-Encoding 8bit
Injection-Info keg.izac.org; logging-data="2224"; mail-complaints-to="usenet@izac.org"
Xref csiph.com fr.comp.lang.python:3471

Show key headers only | View raw


Bonjour,

Le 11/04/2021 à 15:26, Olivier Miakinen a écrit dans le message
<s4utdp$335$1@cabale.usenet-fr.net> :

> 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() ?

Je vois deux possibilités :

1. tu utilises file pour écrire :

    def print(self, indent=0, *, file=sys.stdout):
        """Imprime un filtre auto-indenté"""
        file.write("    "*indent)
        if self.neg: file.write("!")
        if (self.t == "RE"):
            file.write(f"{self.key} /{self.regex.pattern}/\n")
        else:
            file.write(f'{self.t}\n')
            for subf in self.subs: subf.print(indent+1, file=file)

2. tu remplaces le print() par le tiens :

    def print(self, indent=0, *, file=sys.stdout):
        """Imprime un filtre auto-indenté"""
        def print(*args, **kw):
            kw['file'] = file
            __builtins__.print(*args, **kw)

        print("    "*indent, end="")
        if self.neg: print("!", end="")
        if (self.t == "RE"):
            print(f"{self.key} /{self.regex.pattern}/")
        else:
            print(self.t, file=file)
            for subf in self.subs: subf.print(indent+1)

> [
> 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.
> ]

Écrire la représentation du filtre dans « file » ?

Après vu que je ne sais pas trop ce que ça représente, c'est difficile
de dire.

-- 
Benoit Izac

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