Ferramentas de Utilizador

Ferramentas de Site


dev_geral:python:lambda

Diferenças

Esta página mostra as diferenças entre as duas revisões da página.

Ligação para esta vista de comparação

Ambos os lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
dev_geral:python:lambda [2007/11/03 14:38]
pedrotuga
dev_geral:python:lambda [2018/05/14 21:37] (Actual)
Linha 1: Linha 1:
 ====== Funções Lambda ====== ====== Funções Lambda ======
  
-FIXME:​ilustrar com exemplos com mais de uma variável e dar exemplos da poupança de código.+===== Definição =====
  
-O Python tem uma característica interessantíssima que nem sempre é conhecida nem explorada: as funções lambda. 
-Estas funções lambda não são exactamente as mesmas associadas à programação funcional, mas mesmo assim são um conceito bastante bom bem implementado no Python e que muitas vezes são usadas com as funções filter(), map() e reduce(). 
  
-//Grosso modo//podemos ver as funções lambda ​como funções ​sem nome, que podem ser definidas/​usadas na hora.+Influenciada pela linguagem LispPython suporta uma maneira de definir funções com uma linha: ​as chamadas ​funções lambda. Estas funções, ​muitas vezes não exploradas pelo programador iniciado, são um conceito prático ​que pode ser usado em conjunto com as [[dev_geral:​python:​filter|filter()]],​ [[dev_geral:​python:​map|map()]],​ e [[dev_geral:​python:​reduce|reduce()]]. Porém, não são totalmente equivalentes às funções com o mesmo nome das linguagens de programação funcionais como Haskell ou Erlang.
  
-Por exemplopara definir ​uma função que calcule o quadrado de um número, ​pode usar-se o seguinte ​código:+Uma maneira simples de entender este conceito de funções lambdaé a de uma função que pode ser definida na hora, de forma anónima. A sintaxe das lambda é a seguinte: 
 + 
 +''​lambda (argumentos):​ (operação sobre os argumentos)''​ 
 + 
 + ===== Exemplos: ===== 
 +  
 +**Função Quadrado**
  
 <code python>​def quadrado(x):​ <code python>​def quadrado(x):​
   return x*x   return x*x
 +
 +print quadrado(2)
 +4</​code>​
 +
 +Usando funções lambda:
 +
 +<code python>​lambda x: x**x</​code>​
 +
 +<code python>
 +(lambda x: x**x)(2)
 +4
 +
 +# OU
 +
 +quadrado = lambda x: x**x # Podemos atribuir um nome à função e chamar onde queiramos.
 +quadrado(2)
 +4
 </​code>​ </​code>​
  
-e invocar:+**Substituir '​a'​ por '​b'​ em strings**
  
-<code python>quadrado(2)<\code>+<code python> 
 +(lambda frase: return frase.replace('​a',​ '​b'​))('​programar'​) 
 +'​progrbmbr'​ 
 +</code>
  
-retorna 4.+** Função Incremento **
  
-ou então pode fazer-se o cálculo na hora usando uma função ​lambda:+<code python>​ 
 +def incremento(n):​ return ​lambda ​xx+n # Pode parecer confuso, mas atente-se no uso seguinte
  
-<code python>​(lambda x: x*x)(2)</​code>​+f = incremento(2)
  
-que também retorna 4, pois estamos a definir:\\ +f(30) 
-*x é o argumento da função lambda\\ +32
-*x*x é a especificação da função\\ +
-*2 é o valor a aplicar à função+
  
-mais interessante ainda é definir ​função de forma à mesma poder ser usada quando se pretende:+print incremento(30)(20) # O primeiro argumento ​é o incremento ​dar ao valor definido pelo segundo argumento 
 +50 
 +</​code>​
  
-<code python>​quadrado = (lambda xx*x)</​code>​+Numa função normal, definir-se-ia esta função incremento como:
  
-Que pode ser chamado da seguinte forma:+<code python>​ 
 +def incremento(x,​ n)return x+n 
 +</​code>​
  
-<code python>​quadrado(2)</​code>​+Porém, não seria tão flexível como a usando funções lambda, uma vez que se teriam que definir os argumentos de cada vez que se chamasse a função.
  
 +Um exemplo com dois argumentos
 +<code python>
 +>>>​soma = lambda x,y: x+y
 +>>>​soma(2,​3)
 +5
 +</​code>​
  
-Referências:\\+===== Referências ​=====
 [[http://​diveintopython.org/​power_of_introspection/​lambda_functions.html|Using lambda Functions]]. [[http://​diveintopython.org/​power_of_introspection/​lambda_functions.html|Using lambda Functions]].
 +[[http://​www.secnetix.de/​olli/​Python/​lambda_functions.hawk|Python:​ Lambda Functions]]. 
 +{{tag>​python}}
dev_geral/python/lambda.1194100695.txt.gz · Esta página foi modificada pela última vez em: 2018/05/14 21:37 (Edição externa)