Path: csiph.com!aioe.org!yQftVy4DpahetLNbzgJWRw.user.gioia.aioe.org.POSTED!not-for-mail From: Alain Ketterlin Newsgroups: fr.comp.lang.python Subject: Re: =?utf-8?Q?=C2=AB?= Factoriser =?utf-8?Q?=C2=BB?= un =?utf-8?Q?param=C3=A8tre?= Date: Sun, 11 Apr 2021 19:59:01 +0200 Organization: =?utf-8?Q?Universit=C3=A9?= de Strasbourg Lines: 56 Message-ID: <87im4s8zyy.fsf@universite-de-strasbourg.fr.invalid> References: NNTP-Posting-Host: yQftVy4DpahetLNbzgJWRw.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Complaints-To: abuse@aioe.org User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) X-Notice: Filtered by postfilter v. 0.9.2 Cancel-Lock: sha1:nWVckNaeYygPECRIUhoYo+pPwJE= Xref: csiph.com fr.comp.lang.python:3474 Olivier Miakinen writes: > Dans une classe j'ai la m=C3=A9thode suivante. Peu importe le d=C3=A9tail= de ce > qu'elle fait, le point important est tous ces =C2=AB print =C2=BB avec le= param=C3=A8tre > =C2=AB file=3Dfile =C2=BB. > > def print(self, indent=3D0, *, file=3Dsys.stdout): > """Imprime un filtre auto-indent=C3=A9""" > print(" "*indent, end=3D"", file=3Dfile) > if self.neg: print("!", end=3D"", file=3Dfile) > if (self.t =3D=3D "RE"): > print(f"{self.key} /{self.regex.pattern}/", file=3Dfile) > else: > print(self.t, file=3Dfile) > for subf in self.subs: subf.print(indent+1, file=3Dfile) > > Ma question : y a-t-il un moyen de =C2=AB factoriser =C2=BB ce param=C3= =A8tre, avec une > syntaxe du style =C2=AB with file=3Dfile =C2=BB, de fa=C3=A7on =C3=A0 pou= voir le supprimer de > tous les appels =C3=A0 la fonction print() ? Il n'y a pas vraiment de solution pour cela, sauf =C3=A0 d=C3=A9finir une f= onction locale : def print(self, indent=3D0, *, file=3Dsys.stdout): def pr (*p, **k): print (*p, **k, file=3Dfile) ... et utiliser pr (...) dans la suite (j'ai pas essay=C3=A9, hein, cela d=C3= =A9pend peut-=C3=AAtre de la version de python pour l'ajout de "file=3Dfile" apr=C3= =A8s **k). Une autre solution est de rediriger sys.stdout, ce qui est peut-=C3=AAtre le plus simple si c'est applicable. Voir=20 https://docs.python.org/3/library/contextlib.html#contextlib.redirect_stdout > [ > Question subsidiaire : comment traduire au mieux le sens de =C2=AB print = =C2=BB dans > le commentaire au d=C3=A9but de ma fonction ? Je n'ai pas l'impression qu= e le > terme =C2=AB imprime =C2=BB ni le terme =C2=AB affiche =C2=BB ne convienn= ent dans tous les cas. > ] J'utilise "afficher" en g=C3=A9n=C3=A9ral, parce qu'imprimer m'=C3=A9voque immanquablement le papier... -- Alain.