No python 2.6 , eu quero fazer:
f = lambda x: if x==2 print x else raise Exception()
f(2) #should print "2"
f(3) #should throw an exception
Essa claramente não é a sintaxe. É possível realizar uma entrada e, if
em lambda
caso afirmativo, como fazê-lo?
obrigado
python
lambda
python-2.6
Cara
fonte
fonte
Respostas:
A sintaxe que você está procurando:
Mas você não pode usar
print
ouraise
em uma lambda.fonte
if
em uma lambda?" não "qual é a melhor maneira de escrever um lambda que retorne True se um número for par?"por que você não apenas define uma função?
realmente não há justificativa para usar lambda neste caso.
fonte
print
ainda não é uma função no 2.6. :)def
- geralmente é uma Very Bad Idea (tm). Basta usar um programadef
tão simples que os mortais podem ler, interpretar, entender e manter.Provavelmente a pior linha python que escrevi até agora:
Se x == 2 você imprimir,
se x! = 2 você aumenta.
fonte
Você pode facilmente criar uma exceção em um lambda, se é isso que realmente deseja fazer.
isso é uma boa ideia? Meu instinto, em geral, é deixar o relatório de erros fora das lambdas; deixe que ele tenha o valor None e aumente o erro no chamador. Porém, não acho que isso seja inerentemente ruim - considero a sintaxe "y se x mais z" pior - apenas verifique se você não está tentando inserir muita coisa no corpo lambda.
fonte
x = RaiseValueErrorOnNone(x)
, novamente, dependendo do caso.Lambdas em Python são bastante restritivas em relação ao que você pode usar. Especificamente, você não pode ter as palavras-chave (exceto para os operadores como
and
,not
,or
, etc) em seu corpo.Portanto, não há como você usar um lambda como exemplo (porque você não pode usar
raise
), mas se estiver disposto a conceder isso ... Você pode usar:fonte
note que você pode usar várias outras instruções ... if em sua definição lambda:
fonte
Se você ainda deseja imprimir, pode importar o módulo futuro
fonte
Você também pode usar Operadores Lógicos para ter algo como um Condicional.
Você pode ver mais sobre operadores lógicos aqui
fonte
if
sintaxe é sempre preferida a isso. A maneira óbvia de verificar as condições.if
declaração, então achei esse caminho não óbvio .o que você precisa exatamente é
agora chame a função do jeito que você precisa
fonte
Este trecho deve ajudar você a:
fonte
O código de exemplo a seguir funciona para mim. Não tenho certeza se isso está diretamente relacionado a essa questão, mas espero que ajude em outros casos.
fonte
Tente:
Fora:
fonte
Uma maneira fácil de executar um if in lambda é usando a compreensão da lista.
Você não pode gerar uma exceção no lambda, mas esta é uma maneira no Python 3.x de fazer algo próximo ao seu exemplo:
Outro exemplo:
retorne 1 se M caso contrário 0
fonte