Question

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

Ceci est clairement pas la syntaxe. Est-il possible d'effectuer une if dans lambda et si oui, comment le faire?

Merci

Était-ce utile?

La solution

La syntaxe que vous cherchez:

lambda x: True if x % 2 == 0 else False

Mais vous ne pouvez pas utiliser print ou raise dans un lambda.

Autres conseils

pourquoi ne pas définir simplement une fonction?

def f(x):
    if x == 2:
        print(x)
    else:
        raise ValueError

il n'y a vraiment aucune raison d'utiliser lambda dans ce cas.

Vous pouvez facilement soulever une exception dans un lambda, si c'est ce que vous voulez vraiment faire.

def Raise(exception):
    raise exception
x = lambda y: 1 if y < 2 else Raise(ValueError("invalid value"))

Est-ce une bonne idée? Mon instinct en général est de laisser l'erreur de déclaration sur lambdas; laissez-il une valeur de None et augmenter l'erreur dans l'appelant. Je ne pense pas que ce soit un mal en soi, même si - je considère le « y si x autre z » syntaxe se pire -. Assurez-vous de n'essayez pas de trop de choses dans un corps lambda

Probablement la pire ligne de python j'ai écrit jusqu'à présent:

f = lambda x: sys.stdout.write(["2\n",][2*(x==2)-2])

Si x == 2 impression,

si x! = 2 que vous soulevez.

lambdas en Python sont assez restrictives en ce qui concerne ce que vous êtes autorisé à utiliser. Plus précisément, vous ne pouvez pas avoir des mots-clés (sauf pour les opérateurs comme and, not, or, etc.) dans leur corps.

Alors, il n'y a aucun moyen que vous pouvez utiliser un lambda pour votre exemple (parce que vous ne pouvez pas utiliser raise), mais si vous êtes prêt à concéder ce ... Vous pouvez utiliser:

f = lambda x: x == 2 and x or None

Notez que vous pouvez utiliser plusieurs d'autre ... si déclarations contenues dans votre définition lambda:

f = lambda x: 1 if x>0 else 0 if x ==0 else -1

Si vous voulez continuer à imprimer, vous pouvez importer futur module

from __future__ import print_function

f = lambda x: print(x) if x%2 == 0 else False

ce que vous avez besoin est exactement

def fun():
    raise Exception()
f = lambda x:print x if x==2 else fun()

appeler la fonction de la façon dont vous avez besoin

f(2)
f(3)

Cet extrait devrait vous aider:

x = lambda age: 'Older' if age > 30 else 'Younger'

print(x(40))

Vous pouvez également utiliser des opérateurs logiques pour avoir quelque chose comme un conditionnel

func = lambda element: (expression and DoSomething) or DoSomethingIfExpressionIsFalse

Vous pouvez en savoir plus sur les opérateurs logiques

exemple de code fonctionne pour moi. Je ne sais pas si elle est directement liée à cette question, mais elle pourra être utile dans d'autres cas.

a = ''.join(map(lambda x: str(x*2) if x%2==0 else "", range(10)))

Essayez:

is_even = lambda x: True if x % 2 == 0 else False
print(is_even(10))
print(is_even(11))

Out:

True
False
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top