Introdução
Funções anônimas em Python são chamadas de funções lambda. Elas são uma forma de criar funções sem um nome. São úteis para criar funções curtas que são usadas apenas uma vez.
This tutorial is from open-source community. Access the source code
💡 Este tutorial foi traduzido do inglês com assistência de IA. Para ver o original, você pode mudar para a versão em inglês
Funções anônimas em Python são chamadas de funções lambda. Elas são uma forma de criar funções sem um nome. São úteis para criar funções curtas que são usadas apenas uma vez.
Listas podem ser ordenadas in-place (no local). Usando o método sort
.
s = [10,1,7,3]
s.sort() ## s = [1,3,7,10]
Você pode ordenar em ordem reversa.
s = [10,1,7,3]
s.sort(reverse=True) ## s = [10,7,3,1]
Parece simples o suficiente. No entanto, como ordenamos uma lista de dicionários?
[{'name': 'AA', 'price': 32.2, 'shares': 100},
{'name': 'IBM', 'price': 91.1, 'shares': 50},
{'name': 'CAT', 'price': 83.44, 'shares': 150},
{'name': 'MSFT', 'price': 51.23, 'shares': 200},
{'name': 'GE', 'price': 40.37, 'shares': 95},
{'name': 'MSFT', 'price': 65.1, 'shares': 50},
{'name': 'IBM', 'price': 70.44, 'shares': 100}]
Por quais critérios?
Você pode guiar a ordenação usando uma função chave (key function). A função chave é uma função que recebe o dicionário e retorna o valor de interesse para a ordenação.
portfolio = [
{'name': 'AA', 'price': 32.2, 'shares': 100},
{'name': 'IBM', 'price': 91.1, 'shares': 50},
{'name': 'CAT', 'price': 83.44, 'shares': 150},
{'name': 'MSFT', 'price': 51.23, 'shares': 200},
{'name': 'GE', 'price': 40.37, 'shares': 95},
{'name': 'MSFT', 'price': 65.1, 'shares': 50},
{'name': 'IBM', 'price': 70.44, 'shares': 100}
]
def stock_name(s):
return s['name']
portfolio.sort(key=stock_name)
Aqui está o resultado.
## Check how the dictionaries are sorted by the `name` key
[
{'name': 'AA', 'price': 32.2, 'shares': 100},
{'name': 'CAT', 'price': 83.44, 'shares': 150},
{'name': 'GE', 'price': 40.37, 'shares': 95},
{'name': 'IBM', 'price': 91.1, 'shares': 50},
{'name': 'IBM', 'price': 70.44, 'shares': 100},
{'name': 'MSFT', 'price': 51.23, 'shares': 200},
{'name': 'MSFT', 'price': 65.1, 'shares': 50}
]
No exemplo acima, a função chave é um exemplo de uma função de callback. O método sort()
"chama de volta" (calls back) uma função que você fornece. Funções de callback são frequentemente funções curtas de uma linha que são usadas apenas para essa única operação. Os programadores frequentemente pedem um atalho para especificar esse processamento extra.
Use uma lambda em vez de criar a função. Em nosso exemplo de ordenação anterior.
portfolio.sort(key=lambda s: s['name'])
Isso cria uma função sem nome que avalia uma única expressão. O código acima é muito mais curto do que o código inicial.
def stock_name(s):
return s['name']
portfolio.sort(key=stock_name)
## vs lambda
portfolio.sort(key=lambda s: s['name'])
if
, while
, etc.sort()
.Leia alguns dados de portfólio de ações e converta-os em uma lista:
>>> import report
>>> portfolio = list(report.read_portfolio('portfolio.csv'))
>>> for s in portfolio:
print(s)
Stock('AA', 100, 32.2)
Stock('IBM', 50, 91.1)
Stock('CAT', 150, 83.44)
Stock('MSFT', 200, 51.23)
Stock('GE', 95, 40.37)
Stock('MSFT', 50, 65.1)
Stock('IBM', 100, 70.44)
>>>
Experimente as seguintes declarações que ordenam os dados do portfólio alfabeticamente pelo nome da ação.
>>> def stock_name(s):
return s.name
>>> portfolio.sort(key=stock_name)
>>> for s in portfolio:
print(s)
... inspecione o resultado ...
>>>
Nesta parte, a função stock_name()
extrai o nome de uma ação de uma única entrada na lista portfolio
. sort()
usa o resultado desta função para fazer a comparação.
Tente ordenar o portfólio de acordo com o número de ações usando uma expressão lambda
:
>>> portfolio.sort(key=lambda s: s.shares)
>>> for s in portfolio:
print(s)
... inspecione o resultado ...
>>>
Tente ordenar o portfólio de acordo com o preço de cada ação
>>> portfolio.sort(key=lambda s: s.price)
>>> for s in portfolio:
print(s)
... inspecione o resultado ...
>>>
Observação: lambda
é um atalho útil porque permite definir uma função de processamento especial diretamente na chamada para sort()
em vez de ter que definir uma função separada primeiro.
Parabéns! Você concluiu o laboratório de Funções Anônimas e Lambda. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.