463 votes

Comment écrire une instruction if en ligne pour l'impression ?

J'ai besoin d'imprimer certaines choses uniquement lorsqu'une variable booléenne est définie comme suit True . Donc, après avoir regardé ce J'ai essayé avec un exemple simple :

>>> a = 100
>>> b = True
>>> print a if b
  File "<stdin>", line 1
    print a if b
             ^
SyntaxError: invalid syntax  

Même chose si j'écris print a if b==True .

Qu'est-ce que je rate ici ?

1 votes

5 votes

Bonne question, réponses complexes... une réponse directe serait "l'autre partie est obligatoire".

0 votes

Une bonne chose à noter est que le si expression travaille dans lambda mais no la déclaration d'une ligne.

891voto

Jan Hudec Points 27417

Python fait no ont une queue if déclaration .

Il existe deux types de if en Python :

  1. if déclaration :

    if condition: statement
    if condition:
        block
  2. if expression (introduit dans Python 2.5)

    expression_if_true if condition else expression_if_false

Et notez, que les deux print a y b = a sont des déclarations. Seule la a La partie est une expression. Ainsi, si vous écrivez

print a if b else 0

il signifie

print (a if b else 0)

et de même lorsque vous écrivez

x = a if b else 0

il signifie

x = (a if b else 0)

Maintenant, qu'est-ce qu'il imprimerait/attribuerait s'il n'y avait pas de else clause ? L'impression/affectation est toujours là .

Et notez que si vous ne voulez pas qu'il soit là, vous pouvez toujours écrire l'habituel if sur une seule ligne, bien que ce soit moins lisible et qu'il n'y ait pas vraiment de raison d'éviter la variante à deux lignes.

1 votes

Je pense que if condition: statement ne fonctionne pas dans le cas de déclarations multilignes.

0 votes

Oui, mais vous n'avez pas besoin d'utiliser if, utilisez simplement la logique booléenne comme je le montre ci-dessous dans mes exemples.

2 votes

@JanHudec Si Python n'a pas de terminaison if alors pourquoi ça marche : print [i for i in range(10) if i%2] ? J'aimerais qu'ils le permettent en dehors des compréhensions...

111voto

Rostyslav Dzinko Points 10667

Inline if-else EXPRESSION doit toujours contenir la clause else, par exemple

a = 1 if b else 0

Si vous voulez laisser la valeur de votre variable 'a' inchangée, vous devez assigner l'ancienne valeur de 'a' (le reste est toujours requis par les exigences syntaxiques) :

a = 1 if b else a

Ce morceau de code laisse a inchangé lorsque b s'avère être Faux.

1 votes

Oh. Mais si je ne veux pas que quelque chose se passe dans l'autre branche ? J'ai besoin de quelque chose comme : print a if b

2 votes

else a serait mieux que else 0

14 votes

if b: print a Il faut juste un simple "si" dans ce cas

22voto

Alexis Huet Points 298

L'instruction "else" est obligatoire. Vous pouvez faire des choses comme ceci :

>>> b = True
>>> a = 1 if b else None
>>> a
1
>>> b = False
>>> a = 1 if b else None
>>> a
>>> 

EDIT :

Ou, en fonction de vos besoins, vous pouvez essayer :

>>> if b: print(a)

19voto

Noelkd Points 2030

Si vous ne voulez pas from __future__ import print_function vous pouvez faire ce qui suit :

a = 100
b = True
print a if b else "",  # Note the comma!
print "see no new line"

Qui imprime :

100 see no new line

Si vous n'êtes pas averses à from __future__ import print_function ou vous utilisez python 3 ou plus :

from __future__ import print_function
a = False
b = 100
print(b if a else "", end = "")

L'ajout du else est le seul changement que vous devez faire pour que votre code soit syntaxiquement correct, vous avez besoin du else pour l'expression conditionnelle (les "blocs if else en ligne").

La raison pour laquelle je n'ai pas utilisé None o 0 comme d'autres l'ont fait dans ce fil, c'est parce que l'utilisation de la None/0 ferait en sorte que le programme print None o print 0 dans les cas où b es False .

Si vous voulez lire sur ce sujet, j'ai inclus une lien aux notes de publication du patch qui a ajouté cette fonctionnalité à Python.

Le "schéma" ci-dessus est très similaire au schéma présenté dans le document PEP 308 :

Cette syntaxe peut sembler étrange et rétrograde ; pourquoi la condition va-t-elle au milieu de l'expression, et non à l'avant comme dans le C c ? x : y ? La décision a été vérifiée en appliquant la nouvelle syntaxe aux modules modules de la bibliothèque standard et en observant la lecture du code résultant. lire. Dans de nombreux cas où l'on utilise une expression conditionnelle, une valeur semble être le "cas commun" et une valeur est un "cas exceptionnel", qui n'est utilisée qu'en de rares occasions, lorsque la condition n'est pas remplie. La syntaxe conditionnelle de rend ce modèle un peu plus évident :

contenu = ((doc + ' \n ') if doc else '')

Je pense donc que, dans l'ensemble, c'est une façon raisonnable d'aborder la question, mais on ne peut pas contester la simplicité de la démarche :

if logging: print data

0 votes

Merci. Le problème ici est que print "" imprimera quand même quelque chose : une ligne blanche.

0 votes

Merci. Le site end argument dans print n'apparaît que dans Python 3.x, n'est-ce pas ?

1 votes

Oui, je suis plutôt un homme de la 2.7, d'où le from __future__ import print_function

6voto

SkariaArun Points 107

Essayez ceci . Cela pourrait vous aider

a=100
b=True

if b:
   print a

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X