web-dev-qa-db-fra.com

Opérateur ternaire Python Sans autre

Est-il possible de faire cela sur une seule ligne en Python?

if <condition>:
    myList.append('myString')

J'ai essayé l'opérateur ternaire:

myList.append('myString' if <condition>)

mais mon IDE ( MyEclipse ) n'a pas aimé, sans else.

52
JCB

Oui, vous pouvez faire ceci:

<condition> and myList.append('myString')

Si <condition> est faux, le court-circuit sera activé et le côté droit ne sera pas évalué. Si <condition> est vrai, le membre de droite sera évalué et l'élément sera ajouté.

Je soulignerai simplement que faire ce qui précède n’est pas du tout en Pythonic, et il serait probablement préférable d’écrire ceci, peu importe:

if <condition>: myList.append('myString')

Manifestation:

>>> myList = []
>>> False and myList.append('myString')
False
>>> myList
[]
>>> True and myList.append('myString')
>>> myList
['myString']
74
Claudiu

La raison pour laquelle le langage ne vous permet pas d'utiliser la syntaxe

variable = "something" if a_condition

sans else est que, dans le cas où a_condition == False, variable est soudainement inconnu. Peut-être que la valeur par défaut est None, mais Python exige que toutes les affectations de variables donnent lieu à des affectations explicites. Cela s'applique également à des cas tels que l'appel de votre fonction, car la valeur transmise à la fonction est évaluée comme le serait le RHS d'une instruction d'affectation.

De même, tous les returns doivent en réalité être renvoyés, même s’ils sont des returns conditionnels. Par exemple:

return variable if a_condition

n'est pas autorisé, mais 

return variable if a_condition else None

est autorisé, car le deuxième exemple est garanti pour renvoyer explicitement quelque chose.

28
Emmett J. Butler
if <condition>: myList.append('myString')

Sinon, non. Pourquoi avoir besoin de le mettre sur une seule ligne?

Notez que "l'opérateur ternaire" est un opérateur . Comme tout opérateur, il doit retourner quelque chose, comment pouvez-vous avoir un opérateur ternaire sans la clause else? Qu'est-ce qu'il est censé retourner si la condition n'est pas vraie?

11
mgilson

myList.extend(['myString'] if condition else []) fonctionnerait également, bien que ce soit plus de travail que les autres solutions.

3
Jake Biesinger

Vous pouvez faire quelque chose comme ça:

myList.append('myString') if <condition> else False

ou

myList.append('myString') if <condition> else 0
0
Zachary Chiodini