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.

8voto

Vahid Hallaji Points 3985

Si un code en une ligne doit absolument se produire pour vous, Python 3.8 présente expressions d'affectation affectueusement appelé "l'opérateur morse".

:=

someBoolValue and (num := 20)

El 20 sera attribué à num si la première expression booléenne est True . L'affectation doit être entre parenthèses ici, sinon vous obtiendrez une erreur de syntaxe.

num = 10
someBoolValue = True

someBoolValue and (num := 20)
print(num) # 20

num = 10
someBoolValue = False

someBoolValue and (num := 20)
print(num) # 10

6voto

Mark Byers Points 318575

Non. Je suppose que tu espérais que quelque chose comme num1 = 20 if someBoolValue devrait fonctionner, mais ce n'est pas le cas. Je pense que la meilleure façon est avec le if déclaration telle que vous l'avez rédigée :

if someBoolValue:
    num1 = 20

6voto

MikeyB Points 793
num1 = 10 + 10*(someBoolValue is True)

C'est ma nouvelle réponse finale. La réponse précédente était la suivante et était exagérée pour le problème énoncé. Getting_too_clever == not Good . Voici la réponse précédente... toujours valable si vous voulez ajouter une chose pour... True cond et un autre pour False :

num1 = 10 + (0,10)[someBoolValue is True]

Vous avez mentionné num1 aurait déjà une valeur qu'il faudrait laisser tranquille. J'ai supposé que num1 = 10 puisque c'est la première déclaration du poste, donc l'opération pour arriver à 20 est d'ajouter 10 .

num1 = 10
someBoolValue = True

num1 = 10 + (0,10)[someBoolValue is True]

print(f'num1 = {num1}\nsomeBoolValue = {someBoolValue}')

a produit ce résultat

num1 = 20
someBoolValue = True

3voto

soultech67 Points 31

Si vous souhaitez invoquer une méthode si un certain booléen est vrai, vous pouvez mettre else None pour terminer le trinaire.

>>> a=1
>>> print(a) if a==1 else None
1
>>> print(a) if a==2 else None
>>> a=2
>>> print(a) if a==2 else None
2
>>> print(a) if a==1 else None
>>>

2voto

kerwal Points 135
num1 = 20 * someBoolValue or num1

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