179 votes

Affectation conditionnelle d'une ligne

J'ai le code suivant

num1 = 10
someBoolValue = True

Je dois définir la valeur de num1 a 20 si someBoolValue es True et ne rien faire d'autre. Voici donc mon code pour cela

num1 = 20 if someBoolValue else num1

Y a-t-il un moyen d'éviter le ...else num1 partie pour le rendre plus propre ? Un équivalent de

if someBoolValue:
    num1 = 20

J'ai essayé de le remplacer par ...else pass comme ça : num1=20 if someBoolValue else pass . Je n'ai obtenu qu'une erreur de syntaxe. Je ne pouvais pas non plus omettre le ...else num1 partie.

258voto

Frost Points 4169

Je ne pense pas que cela soit possible en Python, puisque ce que vous essayez de faire en réalité est probablement étendu à quelque chose comme ceci :

num1 = 20 if someBoolValue else num1

Si vous excluez else num1 vous recevrez une erreur de syntaxe car je suis certain que l'affectation doit retourner quelque chose.

Comme d'autres l'ont déjà mentionné, vous pourriez le faire, mais ce n'est pas une bonne idée car vous finirez probablement par vous embrouiller en lisant ce morceau de code la prochaine fois :

if someBoolValue: num1=20

Je ne suis pas un grand fan de la num1 = someBoolValue and 20 or num1 pour exactement la même raison. Je dois en fait réfléchir à deux fois à ce que fait cette ligne.

La meilleure façon de réaliser ce que vous voulez faire est la version originale :

if someBoolValue:
    num1 = 20

La raison pour laquelle il s'agit de la meilleure version est que ce que vous voulez faire est très évident et que vous ne vous embrouillerez pas vous-même, ni quiconque sera en contact avec ce code par la suite.

Aussi, comme une note secondaire, num1 = 20 if someBoolValue est un code Ruby valide, car Ruby fonctionne un peu différemment.

60voto

gigimon Points 251

Utilisez ça :

num1 = 20 if someBoolValue else num1

24voto

Debilski Points 28586

En une ligne :

if someBoolValue: num1 = 20

Mais ne faites pas ça. Ce style n'est normalement pas attendu. Les gens préfèrent la forme longue pour plus de clarté et de cohérence.

if someBoolValue:
    num1 = 20

(De même, les bonnets de chameau sont à éviter. Utilisez donc plutôt some_bool_value .)

Notez qu'un expression some_value if predicate sans un else n'existe pas car il n'y aurait pas de valeur de retour si le prédicat était faux. Cependant, les expressions doivent avoir une valeur de retour clairement définie dans tous les cas. Ceci est différent de l'utilisation comme dans, disons, Ruby ou Perl.

19voto

kerwal Points 363

Vous pouvez utiliser l'un des éléments suivants :

(falseVal, trueVal)[TEST]

TEST and trueVal or falseVal

14voto

Adnan Y Points 1842

Pour le futur voyageur du temps de Google, voici une nouvelle méthode (disponible à partir de Python 3.8) :

b = 1
if a := b:
    # this section is only reached if b is not 0 or false.
    # Also, a is set to b
    print(a, b)

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