Domanda

Nel Python 2.6 , che voglio fare:

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

Questo chiaramente non è la sintassi. E 'possibile eseguire un if in lambda e se sì, come si fa?

grazie

È stato utile?

Soluzione

La sintassi che stai cercando:

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

Ma non è possibile utilizzare print o raise in un lambda.

Altri suggerimenti

perchè non solo definisce una funzione?

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

Non c'è davvero alcuna giustificazione per utilizzare lambda in questo caso.

Si può facilmente sollevare un'eccezione in un lambda, se è questo che si vuole veramente fare.

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

E 'una buona idea? Il mio istinto, in generale, è di lasciare la segnalazione degli errori di lambda; lasciare che hanno un valore di None e sollevare l'errore nel chiamante. Non credo che questo è intrinsecamente malvagio, anche se - considero il "y se x il resto z" sintassi in una posizione svantaggiata -. Basta assicurarsi che non si sta cercando di roba troppo in un corpo lambda

Probabilmente la linea di pitone peggiore che ho scritto finora:

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

Se x == 2 si stampa,

se x! = 2 si sollevano.

lambda in Python sono abbastanza restrittive per quanto riguarda ciò che si è permesso di usare. In particolare, non si può avere qualsiasi parola chiave (ad eccezione di operatori come and, not, or, ecc) nel loro corpo.

Quindi, non c'è modo si potrebbe usare un lambda per il tuo esempio (perché non è possibile utilizzare raise), ma se siete disposti a concedere su quel ... Si potrebbe utilizzare:

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

Nota È possibile utilizzare diversi altra cosa ... se affermazioni nella definizione lambda:

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

Se si desidera continuare a stampare è possibile importare il modulo futuro

from __future__ import print_function

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

quello che vi serve è esattamente

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

ora richiamare la funzione del modo in cui è necessario

f(2)
f(3)

Questo frammento di codice dovrebbe aiutare a:

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

print(x(40))

È inoltre possibile utilizzare gli operatori logici di avere qualcosa come un condizionale

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

Si può vedere di più operatori logici qui

A seguito di codice di esempio funziona per me. Non sono sicuro se si riferisce direttamente a questa domanda, ma spero che aiuta in alcuni altri casi.

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

Da provare:

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

Out:

True
False
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top