web-dev-qa-db-fra.com

python? (conditionnel / ternaire) opérateur pour les affectations

C et de nombreuses autres langues ont un opérateur conditionnel (alias ternaire) . Cela vous permet de faire des choix très concis entre deux valeurs basées sur la vérité d'une condition, ce qui rend les expressions, y compris les affectations, très concises.

Cela me manque car je trouve que mon code a beaucoup d'affectations conditionnelles qui prennent quatre lignes en Python:

if condition:
    var = something
else:
    var = something_else

Alors qu'en C ce serait:

var = condition? something: something_else;

Une ou deux fois dans un fichier, c'est bien, mais si vous avez beaucoup d'assignations conditionnelles, le nombre de lignes explose et, pire encore, l'œil est attiré par elles.

J'aime la complexité de l'opérateur conditionnel, car il empêche les choses que je considère non stratégiques de me distraire lorsque je survole le code.

Donc, en Python, y a-t-il des astuces que vous pouvez utiliser pour obtenir l'affectation sur une seule ligne pour approximer les avantages de l'opérateur conditionnel tel que je les ai décrits?

86
Will

Python a un tel opérateur:

variable = something if condition else something_else

Alternativement, bien que non recommandé (voir le commentaire de @ karadoc):

variable = (condition and something) or something_else
160
carl

Dans l'ancien code Python, vous pouvez voir l'astuce:

condition and something or something_else

cependant, cela a été remplacé par le très largement supérieur ... if ... else ... construction:

something if condition else something_else
13
Greg Hewgill