J'ai le code suivant
num1 = 10
someBoolValue = True
Je dois définir la valeur de num1
à 20
if someBoolValue
is True
; et ne rien faire autrement. Alors, voici mon code pour ça
num1 = 20 if someBoolValue else num1
Puis-je éviter la ...else num1
pièce 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 eu, c'est une erreur de syntaxe. Je ne pouvais pas non plus simplement omettre la ...else num1
partie.
python
if-statement
bdhar
la source
la source
num1 = 20 if someBoolValue else 10
. Ensuite, vous enregistrez également lanum1=10
ligne?num1
existe déjà ...Réponses:
Je ne pense pas que cela soit possible en Python, car ce que vous essayez de faire est probablement étendu à quelque chose comme ceci:
Si vous excluez
else num1
, vous recevrez une erreur de syntaxe car je suis tout à fait sûr que l'affectation doit en fait renvoyer quelque chose.Comme d'autres l'ont déjà mentionné, vous pouvez le faire, mais c'est mauvais car vous finirez probablement par vous embrouiller lors de la lecture de ce morceau de code la prochaine fois:
Je ne suis pas un grand fan du
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 réellement ce que vous voulez faire est la version originale:
La raison pour laquelle c'est la meilleure version est parce que ce que vous voulez faire est très évident, et vous ne vous confondrez pas, ni avec quiconque d'autre va entrer en contact avec ce code plus tard.
En outre, en remarque, le
num1 = 20 if someBoolValue
code Ruby est valide, car Ruby fonctionne un peu différemment.la source
num1 = (20 if someBoolValue else num1)
.Utilisez ceci:
la source
En une seule ligne:
Mais ne fais pas ça. Ce style n'est normalement pas attendu. Les gens préfèrent le formulaire plus long pour plus de clarté et de cohérence.
(De même, les casquettes de chameau doivent être évitées. Alors utilisez plutôt
some_bool_value
.)Notez qu'une expression en ligne
some_value if predicate
sanselse
partie 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, par exemple, Ruby ou Perl.la source
vous pouvez utiliser l'un des éléments suivants:
la source
True
/False
, carbool
est une sous-classe deint
. Dans tous les cas où le test renvoie quelque chose qui évaluerait simplement vrai, il échoue avec une exception. Le deuxième ne fonctionne que tant qu'iltrueVal
n'évalue pas faux lui-même, ce qui entraînerait unefalseVal
attribution même si le test était vrai.Non. Je suppose que vous espériez que quelque chose comme ça
num1 = 20 if someBoolValue
marche, mais ce n'est pas le cas. Je pense que le meilleur moyen est d'if
utiliser la déclaration telle que vous l'avez écrite:la source
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 déclaré. Getting_too_clever ==
not Good
. Voici la réponse précédente ... toujours bonne si vous voulez ajouter une chose pourTrue
cond et une autre pourFalse
:Vous avez mentionné
num1
avoir déjà une valeur qui devrait être laissée de côté. Je supposenum1 = 10
que puisque c'est la première déclaration de l'article, l'opération à effectuer20
est donc d'ajouter10
.produit cette sortie
la source
la source
Si vous souhaitez invoquer une méthode si un booléen est vrai, vous pouvez mettre
else None
fin au trinaire.la source
Si un code de ligne va certainement se produire pour vous, Python 3.8 introduit des expressions d'affectation affectueusement appelées «l'opérateur morse».
Le
20
sera attribué ànum
si la première expression booléenne estTrue
. L'affectation doit être entre parenthèses ici, sinon vous obtiendrez une erreur de syntaxe.la source
Pour le futur voyageur temporel de Google, voici une nouvelle méthode (disponible à partir de python 3.8):
la source
Vous pouvez certainement utiliser num1 = (20 if someBoolValue else num1) si vous le souhaitez.
la source
Voici ce que je peux suggérer. Utilisez une autre variable pour dériver la clause if et l'affecter à num1.
Code:
la source
Autrement
num1 = (20*boolVar)+(num1*(not boolVar))
la source
Vous pouvez le faire de cette façon.
Vous pouvez résoudre votre problème de cette façon, mais l'utilisation de 'try / except block' n'est pas la meilleure pratique pour python.
la source