Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 14 additions & 14 deletions vol1/cap07.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ Assim, o melhor lugar para falar delas é na a discussão sobre as dicas de tipo
A((("function parameters, introspection of")))((("parameters", "introspection of function parameters")))
primeira edição desse livro continha seções sobre a introspecção de objetos função,
que desciam a detalhes de baixo nível e desviavam do assunto principal do capítulo.
Reuni aquelas seções em um post entitulado
Reuni aquelas seções em um post intitulado
«"Introspection of Function Parameters" (_Introspecção de Parâmetros de Funções_)» [.small]#[fpy.li/7-2]#, no _fluentpython.com_.
====

Expand Down Expand Up @@ -184,7 +184,7 @@ mas temos alternativas melhores para a maioria de seus casos de uso, como mostra
==== Substitutos modernos para map, filter, e reduce

Linguagens funcionais((("list comprehensions (listcomps)", "versus map and filter functions")))((("generator expressions (genexps)")))
normalmente oferecem as funções de ordem superior `map`, `filter`, and `reduce` (algumas vezes com nomes diferentes).
normalmente oferecem as funções de ordem superior `map`, `filter`, e `reduce` (algumas vezes com nomes diferentes).
As funções `map` e `filter` ainda estão embutidas no Python mas elas não são mais tão importantes
desde a introdução das compreensões de lista e das expressões geradoras,
Uma listcomp ou uma genexp fazem o mesmo que `map` e `filter` combinadas, e são mais legíveis.
Expand Down Expand Up @@ -255,7 +255,7 @@ Outras funções de redução embutidas são `all` e `any`:
`any(iterable)`:: Devolve `True` se qualquer elemento do `iterable` for verdadeiro;
`any([])` devolve `False`.

Dou um explicação mais completa sobre `reduce` na Seção 12.7 [.small]#[vol.2, fpy.li/59]#,
Dou uma explicação mais completa sobre `reduce` na Seção 12.7 [.small]#[vol.2, fpy.li/59]#,
onde um exemplo mais longo, atravessando várias seções, cria um contexto
significativo para o uso dessa função.
As funções de redução serão resumidas mais à frente no livro, na Seção 17.10 [.small]#[vol.3, fpy.li/5a]#,
Expand Down Expand Up @@ -310,15 +310,15 @@ Fredrik Lundh sugere o seguinte procedimento de refatoração:
. Converta a `lambda` para uma declaração `def`, usando aquele nome.
. Remova o comentário.

Esse passos são uma citação do
Esses passos são uma citação do
«_Programação Funcional—COMO FAZER_» [.small]#[fpy.li/46]#,
leitura obrigatória.
****

A sintaxe `lambda` é apenas açúcar sintático: uma expressão `lambda` cria um objeto função,
exatamente como a declaração `def`.
Esse é apenas um dos vários tipos de objetos invocáveis no Python.
Na próxima seção revisamos todos eles.
Na próxima seção revisaremos todos eles.

[[flavors_of_callables]]
=== Os nove sabores de objetos invocáveis
Expand All @@ -343,7 +343,7 @@ Como não existe um operador `new` no Python,
invocar uma classe é como invocar uma função.footnote:[Invocar
uma classe normalmente cria uma instância daquela mesma classe,
mas outros comportamentos são possíveis, sobrescrevendo o `+__new__+`.
Veremos um exemplo disso na Seção 22.2.3 [.small]#[vol.3, fpy.li/5b].]#
Veremos um exemplo disso na Seção 22.2.3 [.small]#[vol.3, fpy.li/5b].]#]

Instâncias de classe:: Se uma classe define um método `+__call__+`, suas instâncias podem então ser invocadas como funções—esse é o assunto da próxima seção.

Expand All @@ -356,7 +356,7 @@ Introduzidas no Python 3.5.
Funções geradoras assíncronas:: Funções((("asynchronous generators"))) ou métodos definidos com `async def`, contendo `yield` em seu corpo.
Quando chamados, devolvem um gerador assíncrono para ser usado com `async for`. Introduzidas no Python 3.6.

Funções geradoras, funções de corrotinas nativas e geradoras assíncronas são diferentes de outros invocáveis: os valores devolvidos tais funções nunca são dados da aplicação, mas objetos que exigem processamento adicional, seja para produzir dados da aplicação, seja para realizar algum trabalho útil.
Funções geradoras, funções de corrotinas nativas e geradoras assíncronas são diferentes de outros invocáveis: os valores devolvidos de tais funções nunca são dados da aplicação, mas objetos que exigem processamento adicional, seja para produzir dados da aplicação, seja para realizar algum trabalho útil.
Funções geradoras devolvem iteradores.
Ambos são tratados no Capítulo 17 [.small]#[vol.3, fpy.li/4s]#.
Funções de corrotinas nativas e funções geradoras assíncronas devolvem objetos que só funcionam com a ajuda de um framework de programação assíncrona, tal como _asyncio_.
Expand Down Expand Up @@ -522,7 +522,7 @@ Após esse mergulho nos recursos flexíveis de declaração de argumentos no Pyt

=== Pacotes para programação funcional

Apesar((("functions, as first-class objects", "packages for functional programming", id="FAFfp07")))((("functional programming", "packages for", id="fprogpack07"))) de Guido deixar claro que não projetou Python para ser uma linguagem de programação funcional, o estilo de programação funcional pode ser amplamente utilizado, graças a funções de primeira classe, _pattern matching_ e o suporte de pacotes como `operator` e `functools`, dos quais falaremos nas próximas duas seções..
Apesar((("functions, as first-class objects", "packages for functional programming", id="FAFfp07")))((("functional programming", "packages for", id="fprogpack07"))) de Guido deixar claro que não projetou Python para ser uma linguagem de programação funcional, o estilo de programação funcional pode ser amplamente utilizado, graças a funções de primeira classe, _pattern matching_ e o suporte de pacotes como `operator` e `functools`, dos quais falaremos nas próximas duas seções.


[[operator_module_section]]
Expand Down Expand Up @@ -596,7 +596,7 @@ Isso é mais fácil de escrever e ler que `lambda fields: fields[1]`, que faz a
----
====

Se você passar múltiplos argumentos de indice para `itemgetter`, a função criada por ela vai devolver tuplas com os valores extraídos, algo que pode ser útil para ordenar((("keys", "sorting multiple"))) usando chaves múltiplas:
Se você passar múltiplos argumentos de índice para `itemgetter`, a função criada por ela vai devolver tuplas com os valores extraídos, algo que pode ser útil para ordenar((("keys", "sorting multiple"))) usando chaves múltiplas:

[source, python]
----
Expand All @@ -619,7 +619,7 @@ Uma irmã de `itemgetter` é `attrgetter`, que cria funções para extrair atrib
Se você passar os nomes de vários atributos como argumentos para `attrgetter`, ela vai devolver um tupla de valores.
Além disso, se o nome de qualquer argumento contiver um `.` (ponto), `attrgetter`
navegará por objetos aninhados para encontrar o atributo.
Esses comportamento são apresentados no <<attrgetter_demo>>. Não é exatamente uma sessão de console curta, pois precisamos criar uma estrutura aninhada para demonstrar o tratamento de atributos com `.` por `attrgetter`.
Esses comportamentos são apresentados no <<attrgetter_demo>>. Não é exatamente uma sessão de console curta, pois precisamos criar uma estrutura aninhada para demonstrar o tratamento de atributos com `.` por `attrgetter`.

[[attrgetter_demo]]
.Demonstração de `attrgetter` para processar uma lista previamente definida de `namedtuple` chamada `metro_data` (a mesma lista que aparece no <<itemgetter_demo>>)
Expand Down Expand Up @@ -681,7 +681,7 @@ Essas funções mudam seu primeiro argumento no mesmo lugar, se o argumento for
se não, funcionam como seus pares sem o prefixo `i`: simplemente devolvem o resultado da operação.

Das funções restantes de `operator`, `methodcaller` será a última que veremos.
Ela é algo similar a `attrgetter` e `itemgetter`, no sentido de criarem uma função durante a execução.
Ela é algo similar a `attrgetter` e `itemgetter`, no sentido de criar uma função durante a execução.
A função criada invoca por nome um método do objeto passado como argumento, como mostra o <<methodcaller_demo>>.

[[methodcaller_demo]]
Expand Down Expand Up @@ -737,7 +737,7 @@ O <<ex_partial_mul>> é uma demonstração trivial.
<2> Testa a função.
<3> Usa `triple` com `map`; `mul` não funcionaria com `map` nesse exemplo.

Um exemplo mais útil envolve a função `unicode.normalize`, que vimos na <<normalizing_unicode>>. Se você trabalha com texto em muitas línguas diferentes, pode querer aplicar `unicode.normalize('NFC', s)` a qualquer string `s`, antes de compará-la ou armazená-la. Se você precisa disso com frequência, é conveninete ter uma função `nfc` para executar essa tarefa, como no <<ex_partial_nfc>>.
Um exemplo mais útil envolve a função `unicode.normalize`, que vimos na <<normalizing_unicode>>. Se você trabalha com texto em muitas línguas diferentes, pode querer aplicar `unicode.normalize('NFC', s)` a qualquer string `s`, antes de compará-la ou armazená-la. Se você precisa disso com frequência, é conveniente ter uma função `nfc` para executar essa tarefa, como no <<ex_partial_nfc>>.

[[ex_partial_nfc]]
.Criando uma função conveniente para normalizar Unicode com `partial`
Expand Down Expand Up @@ -806,7 +806,7 @@ As funções embutidas `sorted`, `min` e `max`, além de `functools.partial`, s
O uso de `map`, `filter` e `reduce` já não é tão frequente como costumava ser, graças às compreensões de lista (e estruturas similares, como as expressões geradoras) e à adição de funções embutidas de redução como `sum`, `all` e `any`.

Desde o Python 3.6, existem nove sabores de invocáveis, como funções simples criadas com `lambda` ou instâncias de classes que implementam `+__call__+`.
Geradoras e corrotinas também são invocáveis, mas seu comportamento é muito diferente dos outros invocáveis.
Geradores e corrotinas também são invocáveis, mas seu comportamento é muito diferente dos outros invocáveis.
Todos os invocáveis podem ser detectados pela função embutida `callable()`.
Invocáveis oferecem uma rica sintaxe para declaração de parâmetros formais,
incluindo parâmetros nomeados, parâmetros somente posicionais e anotações.
Expand Down Expand Up @@ -869,7 +869,7 @@ Nesse artigo, Python é mencionado nominalmente na seguinte passagem:

[quote]
____
E como descrever linguagens como Python, Ruby, ou Perl?
E como descrever linguagens como Python, Ruby ou Perl?
Seus criadores não tem paciência com as sutilezas dessas nomenclaturas de Lineu;
eles pegam emprestados todos os recursos que desejam, criando misturas que desafiam totalmente uma caracterização.
____
Expand Down