Deutsch   English   Français   Italiano  
<87pmqngjay.fsf@universite-de-strasbourg.fr.invalid>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder6.news.weretis.net!feeder8.news.weretis.net!usenet.goja.nl.eu.org!aioe.org!Faqf6A55NG1s8DSVkh3L9A.user.46.165.242.75.POSTED!not-for-mail
From: Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid>
Newsgroups: fr.comp.lang.python
Subject: Re: print
Date: Fri, 26 Nov 2021 14:04:05 +0100
Organization: =?utf-8?Q?Universit=C3=A9?= de Strasbourg
Message-ID: <87pmqngjay.fsf@universite-de-strasbourg.fr.invalid>
References: <61a08538$0$3730$426a34cc@news.free.fr> <875ysf1j6v.fsf@izac.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Injection-Info: gioia.aioe.org; logging-data="39965"; posting-host="Faqf6A55NG1s8DSVkh3L9A.user.gioia.aioe.org"; mail-complaints-to="abuse@aioe.org";
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)
X-Notice: Filtered by postfilter v. 0.9.2
Cancel-Lock: sha1:4BwIDb9f7xgJgoXfurZLWNNjYJw=
Bytes: 4050
Lines: 95

Benoit Izac <use.reply.to@INVALID.ADDRESS> writes:

> Bonjour,
>
> Le 26/11/2021 =C3=A0 07:56, ast <ast@invalid> a =C3=A9crit dans le message
> <61a08538$0$3730$426a34cc@news.free.fr>=C2=A0:
>
>> si je fais:
>>
>>>>> for i in range(5):
>> 	i
>>
>> 0
>> 1
>> 2
>> 3
>> 4
>>
>> j'ai bien l'affichage de i
>> mais si je fais la m=C3=AAme chose dans une fonction:
>>
>>>>> def test():
>> 	for i in range(5):
>> 		i
>>=20=09=09
>>>>> test()
>>>>>
>>
>> Je n'ai rien. Pourquoi ?
>
> J'imagine que dans le premier cas, i est renvoy=C3=A9 =C3=A0 chaque it=C3=
=A9ration
> =C3=A0 l'interpr=C3=A9teur, alors que dans le second cas, c'est renvoy=C3=
=A9 =C3=A0 la
> fonction et vu qu'elle ne renvoie rien, tu n'as rien.

C'est =C3=A7a. La boucle REPL (read-eval-print loop) de l'interpr=C3=A9teur
affiche toutes les valeurs des expressions qui sont ignor=C3=A9es dans
l'ex=C3=A9cution de l'instruction ou l'=C3=A9valuation de l'expression sais=
ie, en
omettant None. Pour une instruction, cela concerne seulement les
expressions directement evalu=C3=A9es, pas celles ignor=C3=A9es dans les ap=
pels de
fonction (ce serait trop compliqu=C3=A9 =C3=A0 faire -- l'ex=C3=A9cution de=
s fonctions
est la m=C3=AAme en mode interactif et en mode script).

(Je me trompe peut-=C3=AAtre sur les d=C3=A9tails, ce comportement n'est =
=C3=A0 ma
connaissance pas document=C3=A9.)

Dans le premier cas, l'instruction est la boucle for, et il y a 5
expressions ignor=C3=A9es (5 fois l'expression i). Il affiche donc 5 valeur=
s.
L'instruction for elle-m=C3=AAme n'a pas de valeur et ne provoque donc aucun
affichage.

Dans le deuxi=C3=A8me cas, la premi=C3=A8re instruction est le def (en enti=
er),
qui n'a pas de valeur, laquelle n'est donc pas ignor=C3=A9e, rien n'est
affich=C3=A9. La seconde expression saisie est l'appel "test()" dont la
valeur est None, qui n'est pas affich=C3=A9e. Le for n'est pas directement
ex=C3=A9cut=C3=A9 dans le contexte de la boucle REPL, mais dans le contexte=
 d'un
appel de fonction "normal". Si ta fonction =C3=A9tait

def test():
    for i in range (5):
        i
    return 42

tu verrais appara=C3=AEtre 42.

(A mon avis, c'est typiquement le genre de fonctionnalit=C3=A9 inutilement
trompeuse. L'interpr=C3=A9teur pourait tr=C3=A8s bien se contenter d'affich=
er les
valeurs des expressions saisies -- comme une calculatrice -- et ignorer
les instructions.)


On peut se demander pourquoi None n'est jamais affich=C3=A9 [*]. Je pense q=
ue
c'est =C3=A0 cause de print (qui renvoie toujours None -- je crois, ce n'est
pas pr=C3=A9cis=C3=A9 dans la doc), parce que taper "print(42)" devrait aff=
icher
42 (par ex=C3=A9cution de print) puis None (qui est la valeur de
l'expression -- un appel est toujours une expression, il a toujours une
valeur en Python).

-- Alain.

P/S: pour v=C3=A9rifier que None est effectivement explicitement ignor=C3=
=A9 :

for i in range (5):
    i if i % 2 =3D=3D 0 else None