Une ligne si la condition d'affectation
J'ai le code suivant
num1 = 10
someBoolValue = True
J'ai besoin de régler la valeur de num1
à 20
si someBoolValue
est True
; et de ne rien faire sinon. Donc, voici mon code pour que
num1 = 20 if someBoolValue else num1
Est là d'une certaine manière, j'ai pu éviter la ...else num1
partie pour le faire paraître plus propre? Un équivalent de
if someBoolValue:
num1 = 20
J'ai essayé de le remplacer avec ...else pass
comme ceci: num1=20 if someBoolValue else pass
. Je n'ai eu d'erreur de syntaxe. Ni seulement je pouvais omettre le ...else num1
partie.
- Il suffit de changer tout à
num1 = 20 if someBoolValue else 10
. Ensuite, vous enregistrez lenum1=10
ligne? - Merci. Mais ce n'est pas exactement mon code. Je voulais dire que
num1
existe déjà...
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que ce soit possible en Python, car ce que vous êtes en train d'essayer de faire probablement étendu à quelque chose comme ceci:
Si vous excluez
else num1
, vous recevrez une erreur de syntaxe depuis que je suis tout à fait sûr que la cession doit retourner quelque chose.Comme d'autres l'ont déjà mentionné, vous pourriez le faire, mais c'est mauvais parce que vous allez probablement finir par déroutant vous-même lors de la lecture de ce morceau de code la prochaine fois:
Je ne suis pas un grand fan de la
num1 = someBoolValue and 20 or num1
pour exactement la même raison. Je pense en fait que deux fois sur ce que cette ligne est en train de faire.La meilleure façon de réaliser ce que vous voulez faire, c'est la version originale:
La raison que c'est le meilleur verison est parce que c'est très clair ce que vous voulez faire, et vous ne confondez pas vous-même, ou toute autre personne qui va venir en contact avec ce code plus tard.
Aussi, comme une note de côté,
num1 = 20 if someBoolValue
est valable du code Ruby, parce que Ruby fonctionne un peu différemment.num1 = (20 if someBoolValue else num1)
.Utiliser ceci:
En une seule ligne:
Mais ne pas le faire. Ce style est normalement pas prévu. Les gens préfèrent la forme plus longue pour plus de clarté et de cohérence.
(Également, de chameau, les bouchons doivent être évités. Alors plutôt utiliser
some_bool_value
.)Noter qu'une ligne de expression
some_value if predicate
sanselse
partie n'existe pas, car il n'y aurait pas de valeur de retour si le prédicat est faux. Cependant, les expressions doivent avoir clairement défini la valeur de retour dans tous les cas. Ceci est différent de l'utilisation de la que dans, disons, Ruby ou Perl.vous pouvez utiliser l'une des opérations suivantes:
True
/False
, depuisbool
est une sous-classe deint
. Dans tous les cas où le test renvoie quelque chose qui serait de simplement évaluer vrai, il échoue avec une exception. Deuxième ne fonctionne que tant quetrueVal
ne pas évaluer faux lui-même, ce qui aurait pour résultatfalseVal
être affecté, même si le test est vrai.Pas. Je suppose que vous étiez en espérant que quelque chose comme
num1 = 20 if someBoolValue
pourrait fonctionner, mais il ne le fait pas. Je pense que la meilleure façon est avec leif
déclaration que vous avez écrit:C'est ma nouvelle réponse finale.
Avant de répondre comme suit et a été exagéré, pour le problème posé. Getting_too_clever ==
not Good
. Voici l'état de la réponse... mais bon si tu veux ajouter une chose pourTrue
cond et un autre pourFalse
:Vous avez mentionné
num1
aurait déjà une valeur qui ne doit être laissé seul. Je supposenum1 = 10
puisque c'est la première déclaration de la poste, de sorte que le fonctionnement d'obtenir à20
est d'ajouter10
.produit cette sortie
Vous pouvez certainement utiliser num1 = (20 si someBoolValue d'autre num1) si vous le souhaitez.
Voici ce que je peux vous proposer.
Utiliser une autre variable pour dériver la clause if et de l'attribuer à num1.
Code:
Une autre façon
num1 = (20*boolVar)+(num1*(not boolVar))
Si vous souhaitez appeler une méthode si certains booléen est vrai, vous pouvez mettre
else None
de résilier le trinary.