You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: Prefacio.adoc
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -115,7 +115,7 @@ O último capítulo na <<data_structures_part>> versa sobre o ciclo de vida dos
115
115
<<classes_protocols_part>>:: Agora((("classes", "topics covered"))) o foco se volta para a criação "manual" de classes—em contraste com o uso de fábricas de classe vistas no <<data_class_ch>>.
116
116
Como qualquer linguagem orientada a objetos, Python tem seu conjunto particular de recursos que podem ou não estar presentes na linguagem na qual você ou eu aprendemos programação baseada em classes. Os capítulos explicam como criar suas próprias coleções, classes base abstratas (ABCs) e protocolos, bem como as formas de lidar com herança múltipla e como implementar a sobrecarga de operadores, quando fizer sentido.O <<more_types_ch>> continua a conversa sobre dicas de tipo.
117
117
118
-
<<control_flow_part>>:: Nesta((("control flow"))) parte são tratados os mecanismos da linguagem e as bibliotecas que vão além do controle de fluxo tradicional, com condicionais, laços e sub-rotinas. Começamos com os geradores, visitamos a seguir os gerenciadores de contexto e as corrotinas, incluindo a desafiadora mas poderosa sintaxe do `yield from`. O <<with_match_ch>> inclui um exemplo significativo, usando _pattern matching_ em um interpretador de linguagem simples mas funcional. O <<concurrency_models_ch>> é novo, apresentando uma visão geral das alternativas para processamento concorrente e paralelo no Python, suas limitações, e como a arquitetura de software permite ao Python operar na escala da Web. Reescrevi o capítulo sobre _programação assíncrona_, para enfatizar os recursos centrais da linguagem—por exemplo, `await`, `async def`, `async for` e `async with`, e mostrar como eles são usados com _asyncio_ e outras frameworks.
118
+
<<control_flow_part>>:: Nesta((("control flow"))) parte são tratados os mecanismos da linguagem e as bibliotecas que vão além do controle de fluxo tradicional, com condicionais, laços e sub-rotinas. Começamos com os geradores, visitamos a seguir os gerenciadores de contexto e as corrotinas, incluindo a desafiadora mas poderosa sintaxe do `yield from`. O <<with_match_ch>> inclui um exemplo significativo, usando _pattern matching_ em um interpretador de linguagem simples mas funcional. O <<concurrency_models_ch>> é novo, apresentando uma visão geral das alternativas para processamento concorrente e paralelo no Python, suas limitações, e como a arquitetura de software permite ao Python operar na escala da Web. Reescrevi o capítulo sobre _programação assíncrona_, para enfatizar os recursos centrais da linguagem—por exemplo, `await`, `async def`, `async for` e `async with`, e mostrar como eles são usados com _asyncio_ e outros frameworks.
119
119
120
120
<<metaprog_part>>:: Essa((("metaprogramming"))) parte começa com uma revisão de técnicas para criação de classes com atributos criados dinamicamente para lidar com dados semi-estruturados, tal como conjuntos de dados JSON. A seguir tratamos do mecanismo familiar das propriedades, antes de mergulhar no funcionamento do acesso a atributos de objetos no Python em um nível mais baixo, usando descritores. A relação entre funções, métodos e descritores é explicada. Por toda a <<metaprog_part>>, a implementação passo a passo de uma biblioteca de validação de campos revela questões sutis, levando às ferramentas avançadas do capítulo final: decoradores de classes e metaclasses.
Copy file name to clipboardExpand all lines: capitulos/cap01.adoc
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -672,7 +672,7 @@ _The Art of the Metaobject Protocol (AMOP)_ (_A Arte do protocolo de metaobjetos
672
672
A parte _metaobjetos_ se refere aos objetos que são os componentes essenciais da própria linguagem. Nesse contexto, _protocolo_ é sinônimo de _interface_. Assim, um _protocolo de metaobjetos_ é um sinônimo chique para modelo de objetos: uma API para os elementos fundamentais da linguagem.
673
673
674
674
Um protocolo de metaobjetos rico permite estender a linguagem para suportar novos paradigmas de programação. Gregor Kiczales, o primeiro autor do _AMOP_, mais tarde se tornou um pioneiro da programação orientada a aspecto, e o autor inicial do AspectJ, uma extensão de Java implementando aquele paradigma.
675
-
A programação orientada a aspecto é muito mais fácil de implementar em uma linguagem dinâmica como Python, e algumas frameworks fazem exatamente isso.
675
+
A programação orientada a aspecto é muito mais fácil de implementar em uma linguagem dinâmica como Python, e alguns frameworks fazem exatamente isso.
676
676
O exemplo mais importante é a https://fpy.li/1-12[_zope.interface_] (EN),
677
677
parte do framework sobre a qual o sistema de gerenciamento de conteúdo https://plone.org.br/[Plone] é construído.
Copy file name to clipboardExpand all lines: capitulos/cap04.adoc
+7-4Lines changed: 7 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -558,10 +558,13 @@ Vamos agora ver como tratar arquivos de texto no Python 3.((("", startref="UTVun
558
558
559
559
A((("Unicode text versus bytes", "handling text files", id="UTVtext04")))((("text files, handling", id="Tfile04"))) melhor prática para lidar com E/S de texto é o((("Unicode sandwich"))) "Sanduíche de Unicode" (_Unicode sandwich_)
560
560
(<<unicode_sandwich_fig>>).footnote:[A primeira vez que vi o termo "Unicode sandwich" (_sanduíche de Unicode_) foi na excelente apresentação de Ned Batchelder, https://fpy.li/4-10["Pragmatic Unicode" (_Unicode pragmático_) (EN)] na US PyCon 2012.]
561
-
Isso significa que os `bytes` devem ser decodificados para `str` o mais cedo possível na entrada (por exemplo, ao abrir um arquivo para leitura).
562
-
O "recheio" do sanduíche é a lógica do negócio de seu programa, onde o tratamento do texto é realizado exclusivamente sobre objetos `str`.
563
-
Você nunca deveria codificar ou decodificar no meio de outro processamento. Na saída, as `str` são codificadas para `bytes` o mais tarde possível.
564
-
A maioria das frameworks web funcona assim, e raramente encostamos em `bytes` ao usá-las.
561
+
Isso significa que os `bytes` devem ser decodificados para `str` o mais cedo possível na entrada
562
+
(por exemplo, ao abrir um arquivo para leitura).
563
+
O "recheio" do sanduíche é a lógica do negócio de seu programa,
564
+
onde o tratamento do texto é realizado exclusivamente sobre objetos `str`.
565
+
Você nunca deveria codificar ou decodificar no meio de outro processamento.
566
+
Na saída, as `str` são codificadas para `bytes` o mais tarde possível.
567
+
A maioria dos frameworks web funciona assim, e raramente tocamos em `bytes` ao usá-los.
565
568
No Django, por exemplo, suas views devem produzir `str` em Unicode; o próprio Django se encarrega de codificar a resposta para `bytes`, usando UTF-8 como default.
566
569
567
570
O Python 3 torna mais fácil seguir o conselho do sanduíche de Unicode, pois o embutido `open()` executa a decodificação necessária na leitura e a codificação ao escrever arquivos em modo texto. Dessa forma, tudo que você recebe de `my_file.read()` e passa para `my_file.write(text)` são objetos `str`.
Copy file name to clipboardExpand all lines: capitulos/cap09.adoc
+6-3Lines changed: 6 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -197,13 +197,16 @@ Considerando((("decorators and closures", "registration decorators")))((("regist
197
197
* A função do decorador é definida no mesmo módulo das funções decoradas. Em geral, um decorador real é definido em um módulo e aplicado a funções de outros módulos.
198
198
* O decorador `register` devolve a mesma função recebida como argumento. Na prática, a maior parte dos decoradores define e devolve uma função interna.
199
199
200
-
Apesar do decorador `register` no <<registration_ex>> devolver a função decorada inalterada, aquela técnica não é inútil. Decoradores parecidos são usados por muitas frameworks Python para adicionar funções a um registro central—por exemplo, um registro mapeando padrões de URLs para funções que geram respostas HTTP. Tais decoradores de registro podem ou não modificar as funções decoradas.
200
+
Apesar do decorador `register` no <<registration_ex>> devolver a função decorada inalterada, a técnica não é inútil.
201
+
Decoradores parecidos são usados por muitos frameworks Python para adicionar funções a um registro central—por exemplo,
202
+
um registro mapeando padrões de URLs para funções que geram respostas HTTP.
203
+
Tais decoradores de registro podem ou não modificar as funções decoradas.
201
204
202
205
Vamos ver um decorador de registro em ação na <<decorated_strategy>> (do <<rethinking_design_patterns>>).
203
206
204
207
A maioria dos decoradores modificam a função decorada.
205
208
Eles normalmente fazem isso definindo e devolvendo uma função interna para substituir a função decorada.
206
-
E código que usa funções internas quase sempre depende de clausuras para operar corretamente.
209
+
Código que usa funções internas quase sempre depende de clausuras para operar corretamente.
207
210
Para entender as clausuras, precisamos dar um passo atrás e revisar como o escopo de variáveis funciona no Python.
208
211
209
212
=== Regras de escopo de variáveis
@@ -1230,7 +1233,7 @@ Percorremos((("decorators and closures", "overview of"))) um terreno acidentado
1230
1233
1231
1234
Partimos de um decorador simples `@register`, sem uma função interna, e terminamos com um `@clock()` parametrizado envolvendo dois níveis de funções aninhadas.
1232
1235
1233
-
Decoradores de registro, apesar de serem essencialmente simples, tem aplicações reais nas frameworks Python. Vamos aplicar a ideia de registro em uma implementação do padrão de projeto Estratégia, no <<rethinking_design_patterns>>.
1236
+
Decoradores de registro, apesar de serem essencialmente simples, tem aplicações reais nos frameworks Python. Vamos aplicar a ideia de registro em uma implementação do padrão de projeto Estratégia, no <<rethinking_design_patterns>>.
1234
1237
1235
1238
Entender como os decoradores realmente funcionam exigiu falar da diferença entre _tempo de importação_ e _tempo de execução_. Então mergulhamos no escopo de variáveis, clausuras e a nova declaração `nonlocal`. Dominar as clausuras e `nonlocal` é valioso não apenas para criar decoradores, mas também para escrever programas orientados a eventos para GUIs ou E/S assíncrona com _callbacks_, e para adotar um estilo funcional quando fizer sentido.
Copy file name to clipboardExpand all lines: capitulos/cap14.adoc
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -863,7 +863,7 @@ Go é uma das mais bem sucedidas linguagens criadas no século 21. Ela não incl
863
863
Em Go é possível definir interfaces, que são verificadas pelo compilador usando tipagem estrutural, também conhecida como((("static duck typing"))) _duck typing estática_—algo muito similar ao que temos com os tipos protocolo desde o Python 3.8. Essa linguagem também tem uma sintaxe especial para a criação de tipos e interfaces por composição, mas não há suporte a herança—nem entre interfaces.
864
864
865
865
Então talvez o melhor conselho sobre herança seja: evite-a se puder.
866
-
Mas, frequentemente, não temos essa opção: as frameworks que usamos nos impõe suas escolhas de design.
866
+
Mas, frequentemente, não temos essa opção: os frameworks que usamos nos impõe suas escolhas de design.
Copy file name to clipboardExpand all lines: capitulos/cap21.adoc
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -106,7 +106,7 @@ Geradora assíncrona::
106
106
O((("@asyncio.coroutine decorator"))) decorador `@asyncio.coroutine` para corrotinas clássicas e corrotinas baseadas em gerador foi descontinuado no Python 3.8, e está previsto para ser removido no Python 3.11, de acordo com o https://fpy.li/21-2[Issue 43216].
107
107
Por outro lado, `@types.coroutine` deve continuar existindo, como se vê aqui:
108
108
https://fpy.li/21-3[Issue 36921].
109
-
Esse decorador não é mais suportado pelo _asyncio_, mas é usado em código interno nas frameworks assíncronas _Curio_ e _Trio_.
109
+
Esse decorador não é mais suportado pelo _asyncio_, mas é usado em código interno nos frameworks assíncronos _Curio_ e _Trio_.
110
110
====
111
111
112
112
@@ -816,7 +816,7 @@ Veja o artigo https://pt.wikipedia.org/wiki/Listas_invertidas["Listas Invertidas
816
816
==== Um serviço web com FastAPI
817
817
818
818
Escrevi((("FastAPI framework", id="fastapi21"))) o próximo exemplo—_web_mojifinder.py_—usando a https://fpy.li/21-28[_FastAPI_]:
819
-
uma das frameworks ASGI de desenvolvimento Web do Python, mencionada na <<asgi_note>>.
819
+
uma dos frameworks ASGI de desenvolvimento Web do Python, mencionada na <<asgi_note>>.
820
820
A <<web_mojifinder_result>> é uma captura de tela da interface de usuário.
821
821
É uma aplicação muito simples, de uma página só (SPA, Single Page Application): após o download inicial do HTML, a interface é atualizada via Javascript no cliente, em comunicação com o servidor.
0 commit comments