Pouvons-nous avoir de la cession dans une condition?
Est-il possible d'avoir de la cession dans une condition?
Pour ex.
if (a=some_func()):
# Use a
- Deux questions ont la même réponse ne signifie pas qu'ils sont des doublons. Trivial pour répondre à vous-même, mais non trivial de voir le raisonnement, ou si il existe un moyen de contourner.
Vous devez vous connecter pour publier un commentaire.
Pourquoi ne pas essayer?
Donc, pas de.
x = x + 1
nécessite plus de temps de recherche tout enx += 1
a été un peu plus vite, mais je suis sûr qu'il n'aime même pas le faire que, beaucoup. 🙂Non, le BDFL n'aimait pas cette fonctionnalité.
D'où je suis assis, Guido van Rossum, "Dictateur Bienveillant à Vie”, a lutté pour garder Python aussi simple qu'il peut être. On peut chipoter avec certaines des décisions qu'il a fait -- j'aurais préféré qu'il dit " Non " plus souvent. Mais le fait qu'il n'a pas été d'un comité de la conception de Python, mais plutôt de confiance "conseil consultatif", largement basée sur le mérite, qui filtre à travers un designer sensibilités, a produit un enfer d'une belle langue, à mon humble avis.
if let
, quand j'ai un si elif chaîne, mais qui ont besoin de stocker et d'utiliser la valeur de la condition dans chaque cas.Mise à JOUR - Original de la réponse est près du bas de
Python 3.8 apportera PEP572
https://lwn.net/Articles/757713/
https://www.python.org/dev/peps/pep-0572/#examples-from-the-python-standard-library
Réponse originale à cette question
http://docs.python.org/tutorial/datastructures.html
voir aussi:
http://effbot.org/pyfaq/why-can-t-i-use-an-assignment-in-an-expression.htm
if (foo = 'bar')
tout en ayant l'intention de tester la valeur defoo
.=
Pas directement, par cette vieille recette de la mine -- mais comme la recette dit que c'est facile de construire la sémantique équivalent, par exemple, si vous avez besoin de translittérer directement à partir d'un C-référence codée algorithme (avant le refactoring de plus idiomatiques Python, bien sûr;-). I. e.:
BTW, très idiomatiques Pythonic forme pour votre cas particulier, si vous savez exactement ce que falsish valeur
somefunc
peut revenir quand elle retourne un falsish valeur (par exemple,0
), estdonc, dans ce cas précis, le refactoring serait assez facile;-).
Si le retour pourrait être tout genre de falsish valeur (0,
None
,''
, ...), une possibilité est:mais vous pourriez préférer un simple générateur personnalisé:
Oui, mais seulement à partir de Python 3.8 et au-delà.
PEP 572 propose Affectation des Expressions et a déjà été accepté.
Citant le La syntaxe et de la sémantique partie de la PEP:
Dans votre cas particulier, vous serez en mesure d'écrire
Pas. Affectation en Python est un état, pas une expression.
Grâce à Python 3.8 nouvelle fonctionnalité il sera possible de faire une telle chose à partir de cette version, bien que n'utilisant pas
=
mais Ada-comme opérateur d'affectation:=
. Exemple de la doc:Vous pouvez définir une fonction pour faire la recherche pour vous:
Une des raisons pour lesquelles les affectations sont illégales dans des conditions est qu'il est plus facile de faire une erreur et l'attribuer Vrai ou Faux:
En Python 3 True et False sont des mots-clés, donc pas de risques.
== True
sur le côté droit de toute façon.