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
.
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']
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 return
s doivent en réalité être renvoyés, même s’ils sont des return
s 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.
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?
myList.extend(['myString'] if condition else [])
fonctionnerait également, bien que ce soit plus de travail que les autres solutions.
Vous pouvez faire quelque chose comme ça:
myList.append('myString') if <condition> else False
ou
myList.append('myString') if <condition> else 0