Is er een manier om if uit te voeren in de lambda van python?

In Python 2.6 wil ik het volgende doen:

f = lambda x: if x==2 print x else raise Exception()
f(2) #should print "2"
f(3) #should throw an exception

Dit is duidelijk niet de syntaxis. Is het mogelijk om een ​​if uit te voeren in lambda en zo ja, hoe dit te doen?


Antwoord 1, autoriteit 100%

De syntaxis die u zoekt:

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

Maar je kunt print of raise niet gebruiken in een lambda.


Antwoord 2, autoriteit 6%

waarom definieer je niet gewoon een functie?

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

er is in dit geval echt geen reden om lambda te gebruiken.


Antwoord 3, autoriteit 4%

Waarschijnlijk de slechtste python-regel die ik tot nu toe heb geschreven:

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

Als x == 2 u afdrukt,

als x != 2 verhoogt u.


Antwoord 4, autoriteit 3%

Je kunt gemakkelijk een uitzondering maken in een lambda, als je dat echt wilt.

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

Is dit een goed idee? Mijn instinct in het algemeen is om de foutrapportage uit lambda’s te laten; laat het de waarde Geen hebben en verhoog de fout in de beller. Ik denk echter niet dat dit inherent slecht is – ik vind de syntaxis “y if x else z” zelf slechter – zorg er gewoon voor dat je niet te veel in een lambdalichaam probeert te proppen.


Antwoord 5, autoriteit 2%

Lambda’s in Python zijn vrij beperkend met betrekking tot wat je mag gebruiken. U kunt met name geen trefwoorden (behalve operators zoals and, not, or, enz.) in hun hoofdtekst hebben.

Dus je kunt geen lambda als voorbeeld gebruiken (omdat je geen raise kunt gebruiken), maar als je bereid bent toe te geven, kun je het volgende gebruiken:

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

Antwoord 6, autoriteit 2%

merk op dat u verschillende else…if-statements kunt gebruiken in uw lambda-definitie:

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

Antwoord 7

Als u nog steeds wilt afdrukken, kunt u de toekomstige module importeren

from __future__ import print_function
f = lambda x: print(x) if x%2 == 0 else False

Antwoord 8

U kunt ook logische operators gebruiken om zoiets als een voorwaardelijke

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

Je kunt hier

meer zien over logische operators


Antwoord 9

wat je precies nodig hebt is

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

roep nu de functie aan zoals je wilt

f(2)
f(3)

Antwoord 10

Dit fragment zou je moeten helpen:

x = lambda age: 'Older' if age > 30 else 'Younger'
print(x(40))

Antwoord 11

Een gemakkelijke manier om een ​​if in lambda uit te voeren, is door lijstbegrip te gebruiken.

Je kunt geen uitzondering maken in lambda, maar dit is een manier in Python 3.x om iets te doen dat in de buurt komt van je voorbeeld:

f = lambda x: print(x) if x==2 else print("exception")

Nog een voorbeeld:

geef 1 terug als M anders 0

f = lambda x: 1 if x=="M" else 0

Antwoord 12

de oplossing voor de gegeven scenerio is:

f = lambda x : x if x == 2 else print("number is not 2")
f(30)  # number is not 2
f(2)   #2

Antwoord 13

De volgende voorbeeldcode werkt voor mij. Ik weet niet zeker of het direct verband houdt met deze vraag, maar ik hoop dat het in sommige andere gevallen helpt.

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

Antwoord 14

Probeer het:

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

Uit:

True
False

Antwoord 15

Ik hoop dat dit een beetje helpt

u kunt dit probleem op de volgende manier oplossen

f = lambda x:  x==2   
if f(3):
  print("do logic")
else:
  print("another logic")

Antwoord 16

Ik denk dat dit is wat je zocht

>>> f = lambda x : print(x) if x==2 else print("ERROR")
>>> f(23)
ERROR
>>> f(2)
2
>>> 

LEAVE A REPLY

Please enter your comment!
Please enter your name here

one × 3 =

Other episodes