J'ai le code suivant
num1 = 10
someBoolValue = True
Je dois définir la valeur de num1
sur 20
si someBoolValue
est True
; et ne rien faire autrement. Alors, voici mon code pour ça
num1 = 20 if someBoolValue else num1
Y a-t-il un moyen d'éviter la partie ...else num1
pour la rendre plus propre? Un équivalent à
if someBoolValue:
num1 = 20
J'ai essayé de le remplacer par ...else pass
comme ceci: num1=20 if someBoolValue else pass
. Tout ce que j'ai obtenu était une erreur de syntaxe. Je ne pouvais pas non plus omettre la partie ...else num1
.
Je ne pense pas que cela soit possible en Python, car ce que vous essayez réellement de faire 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 à peu près sûr que l'affectation doit en réalité renvoyer quelque chose.
Comme d'autres l'ont déjà mentionné, vous pouvez le faire, mais c'est mauvais, car vous risquez probablement de vous perdre lorsque vous lirez ce code la prochaine fois:
if someBoolValue: num1=20
Je ne suis pas un grand fan du num1 = someBoolValue and 20 or num1
pour la même raison. Je dois en fait réfléchir à deux fois sur ce que fait cette ligne.
Le meilleur moyen de réaliser ce que vous voulez faire est la version originale:
if someBoolValue:
num1 = 20
La meilleure raison en est que ce que vous voulez faire est très clair et vous ne risquez pas de vous embrouiller, ou de quiconque viendra plus tard en contact avec ce code.
De plus, num1 = 20 if someBoolValue
est un code Ruby valide, car Ruby fonctionne un peu différemment.
Utilisez ceci:
num1 = 20 if someBoolValue else num1
En une ligne:
if someBoolValue: num1 = 20
Mais ne fais 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 chapeaux de chameau doivent être évités. Utilisez plutôt some_bool_value
.)
Notez qu'une expression some_value if predicate
sans une partie 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 telle que Ruby ou Perl, par exemple.
vous pouvez utiliser l'un des éléments suivants:
(falseVal, trueVal)[TEST]
TEST and trueVal or falseVal
Non. Je suppose que vous espériez que quelque chose comme num1 = 20 if someBoolValue
fonctionnerait, mais cela ne fonctionne pas. Je pense que le meilleur moyen est d'utiliser l'énoncé if
tel que vous l'avez écrit:
if someBoolValue:
num1 = 20
num1 = 10 + 10*(someBoolValue == True)
C'est ma nouvelle réponse finale… .. La réponse précédente était la suivante et était excessive 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 une autre pour False
:
num1 = 10 + (0,10)[someBoolValue == True]
Vous avez mentionné que num1
aurait déjà une valeur qui devrait être laissée seule. J'ai supposé que num1 = 10
étant la première déclaration de la publication, l'opération pour se rendre à 20
consiste à ajouter 10
.
num1 = 10
someBoolValue = True
num1 = 10 + (0,10)[someBoolValue == True]
print(f'num1 = {num1}\nsomeBoolValue = {someBoolValue}')
produit cette sortie
num1 = 20
someBoolValue = True
num1 = 20 * someBoolValue or num1
Si vous souhaitez invoquer une méthode si une valeur booléenne est vraie, 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
>>>
Une autre façon num1 = (20*boolVar)+(num1*(not boolVar))
Voici ce que je peux suggérer . Utilisez une autre variable pour dériver la clause if et affectez-la à num1.
Code:
num2 =20 if someBoolValue else num1
num1=num2
Vous pouvez certainement utiliser num1 = (20 si someBoolValue sinon num1) si vous le souhaitez.