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

Próxima revisão
Revisão anterior
dev_geral:python:lambda [2007/10/24 14:06]
127.0.0.1 external edit
dev_geral:python:lambda [2018/05/14 21:37] (Actual)
Linha 1: Linha 1:
-O [[Python]] tem uma característica interessantíssima que nem sempre é conhecida nem explorada: as funções lambda. +====== 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.+===== Definição =====
  
-Por exemplo, se quiserem definir uma função que calcule o quadrado de um número, podem definir a seguinte função: 
  
-<​code ​language="​python">def quadrado(x):​+Influenciada pela linguagem Lisp, Python 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. 
 + 
 +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):​
   return x*x   return x*x
-<​\/​code>​ 
  
-e invocar:+print quadrado(2) 
 +4</​code>​ 
 + 
 +Usando funções lambda: 
 + 
 +<code python>​lambda x: x**x</​code>​ 
 + 
 +<code python>​ 
 +(lambda x: x**x)(2) 
 +
 + 
 +# OU 
 + 
 +quadrado = lambda x: x**x # Podemos atribuir um nome à função e chamar onde queiramos. 
 +quadrado(2) 
 +
 +</​code>​
  
-<code language="​python">​quadrado(2)<​\/​code>​+**Substituir '​a'​ por '​b'​ em strings**
  
-retorna 4.+<code python>​ 
 +(lambda frase: return frase.replace('​a',​ '​b'​))('​programar'​) 
 +'​progrbmbr'​ 
 +</​code>​
  
-ou então podem fazer o cálculo na hora usando uma função lambda:+** Função Incremento **
  
-<​code ​language="​python">(lambda x: x*x)(2)<​\/​code>​+<code python> 
 +def incremento(n): return ​lambda x: x+n # Pode parecer confuso, mas atente-se no uso seguinte
  
-que também retorna 4, pois estamos a definir: +f = incremento(2)
-*x é o argumento da função lambda +
-*x*x é a especificação da função +
-*é o valor a aplicar à função+
  
-mais interessante ainda é definir a função de forma à mesma poder ser usada quando se pretende:+f(30) 
 +32
  
-<code language="​python">​quadrado = (lambda x: x*x)<\/code>+print incremento(30)(20# O primeiro argumento é o incremento a dar ao valor definido pelo segundo argumento 
 +50 
 +</​code>​
  
-quando fazem:+Numa função normal, definir-se-ia esta função incremento como:
  
-<​code ​language="​python">quadrado(2)<\/code>+<code python> 
 +def incremento(x, n): return x+n 
 +</​code>​
  
-vão obter 4.+Porém, não seria tão flexível como a usando funções lambda, uma vez que se teriam que definir os 2 argumentos de cada vez que se chamasse a função.
  
-Isto tem imensas aplicações e utilidades. +Um exemplo com dois argumentos 
-Para saberem mais deixo aqui um capítulo sobre este tema: [[http://​diveintopython.org/​power_of_introspection/​lambda_functions.html|Using lambda Functions]].+<code python>​ 
 +>>>​soma = lambda x,yx+y 
 +>>>​soma(2,​3) 
 +
 +</code>
  
-As funções lambda aplicadas com as funções ​[[py_map|Map, Filter e Reduce]] criam uma flexibilidade fantástica a quem explora o Python ​mais a fundo.+===== Referências ===== 
 +[[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.1193234761.txt.gz · Esta página foi modificada pela última vez em: 2018/05/14 21:37 (Edição externa)