En python 2.6 , je veux faire:
f = lambda x: if x==2 print x else raise Exception()
f(2) #should print "2"
f(3) #should throw an exception
Ce n'est clairement pas la syntaxe. Est-il possible d'effectuer un if
in lambda
et si oui, comment le faire?
Merci
python
lambda
python-2.6
Gars
la source
la source
Réponses:
La syntaxe que vous recherchez:
Mais vous ne pouvez pas utiliser
print
ouraise
dans un lambda.la source
if
dans une lambda?" pas "quelle est la meilleure façon d'écrire un lambda qui renvoie True si un nombre est pair?"pourquoi ne définissez-vous pas simplement une fonction?
il n'y a vraiment aucune justification à utiliser lambda dans ce cas.
la source
print
n'est pas encore une fonction en 2.6. :)def
- est généralement une très mauvaise idée (tm). Il suffit d'utiliser undef
simple programmeur mortel qui peut le lire, l'interpréter, le comprendre et le maintenir.Probablement la pire ligne de python que j'ai écrite jusqu'à présent:
Si x == 2 vous imprimez,
si x! = 2 vous relancez.
la source
Vous pouvez facilement lever une exception dans un lambda, si c'est ce que vous voulez vraiment faire.
Est-ce une bonne idée? Mon instinct en général est de laisser les rapports d'erreur hors des lambdas; laissez-lui la valeur None et déclenchez l'erreur dans l'appelant. Je ne pense pas que ce soit intrinsèquement mauvais, cependant - je considère que la syntaxe "y si x sinon z" elle-même est pire - assurez-vous simplement que vous n'essayez pas de trop envelopper dans un corps lambda.
la source
x = RaiseValueErrorOnNone(x)
, encore une fois, selon le cas.Les lambdas en Python sont assez restrictifs en ce qui concerne ce que vous êtes autorisé à utiliser. Plus précisément, vous ne pouvez pas avoir des mots - clés ( à l' exception des opérateurs comme
and
,not
,or
, etc.) dans leur corps.Donc, il n'y a aucun moyen d'utiliser un lambda pour votre exemple (parce que vous ne pouvez pas l'utiliser
raise
), mais si vous êtes prêt à concéder cela ... Vous pouvez utiliser:la source
notez que vous pouvez en utiliser plusieurs autres ... if dans votre définition lambda:
la source
Si vous voulez toujours imprimer, vous pouvez importer le futur module
la source
Vous pouvez également utiliser des opérateurs logiques pour avoir quelque chose comme un conditionnel
Vous pouvez en savoir plus sur les opérateurs logiques ici
la source
if
syntaxe est toujours préférée à cela. La manière évidente de vérifier les conditions.if
déclaration, j'ai donc trouvé ce moyen pas évident .ce dont vous avez besoin exactement
appelez maintenant la fonction comme vous le souhaitez
la source
Cet extrait devrait vous aider à:
la source
L'exemple de code suivant fonctionne pour moi. Je ne sais pas si cela se rapporte directement à cette question, mais j'espère que cela aide dans d'autres cas.
la source
Essayez-le:
En dehors:
la source
Un moyen simple d'effectuer un if dans lambda est d'utiliser la compréhension de liste.
Vous ne pouvez pas lever d'exception dans lambda, mais c'est un moyen dans Python 3.x de faire quelque chose de proche de votre exemple:
Un autre exemple:
retourner 1 si M sinon 0
la source