Skip to content

Commit de48350

Browse files
committed
cap21: revisão de estilo WIP
1 parent 9a1dc3f commit de48350

File tree

13 files changed

+504
-245
lines changed

13 files changed

+504
-245
lines changed

code/20-executors/getflags/flags_asyncio.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,5 @@ async def supervisor(cc_list: list[str]) -> int:
4343
return len(res) # <6>
4444

4545
if __name__ == '__main__':
46-
main(download_many)
46+
main(download_many) # <7>
4747
# end::FLAGS_ASYNCIO_START[]

images/flpy_2101.png

1.29 KB
Loading

online/cap14.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ Escrevi uma nova seção de abertura, tratando especificamente da função embut
6767
profundamente a forma como `super()` suporta a herança múltipla cooperativa.
6868

6969
A <<mixin_classes_sec>> também é nova. Reorganizei a <<multi_real_world_sec>>,
70-
apresentando exemplos mais simples de _mixin_ na bilbioteca
70+
apresentando exemplos mais simples de _mixin_ na biblioteca
7171
padrão, antes de apresentar o exemplos com o Django e a
7272
hierarquia complicada do Tkinter.
7373

@@ -1012,7 +1012,7 @@ Text, Widget, BaseWidget, Misc, Pack, Place, Grid, XView, YView, object
10121012
====
10131013
10141014
Pelos padrões atuais, a hierarquia de classes do Tkinter é profunda demais.
1015-
Poucas partes da bilbioteca padrão de Python tem mais que três ou quatro níveis
1015+
Poucas partes da biblioteca padrão de Python tem mais que três ou quatro níveis
10161016
de classes concretas, e o mesmo pode ser dito da biblioteca de classes de Java.
10171017
Entretanto, é interessante observar que algumas das hierarquias mais profundas
10181018
da biblioteca de classes de Java são precisamente os pacotes relacionados à

online/cap15.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1158,7 +1158,7 @@ Dada a instabilidade da situação atual, se você precisar ler anotações dura
11581158

11591159
* Evite ler `+__annotations__+` diretamente; em vez disso, use `inspect.get_annotations` (desde o Python 3.10) ou `typing.get_type_hints` (desde o Python 3.5).
11601160
* Escreva uma função customizada própria, como um invólucro para
1161-
pass:[<code>in&#x200b;spect&#x200b;.get_annotations</code>] ou `typing.get_type_hints`, e faça o restante de sua base de código chamar aquela função, de forma que mudanças futuras fiquem restritas a um único local.
1161+
`inspect.get_annotations` ou `typing.get_type_hints`, e faça o restante de sua base de código chamar aquela função, de forma que mudanças futuras fiquem restritas a um único local.
11621162

11631163
Para demonstrar esse segundo ponto, aqui estão as primeiras linhas da classe `Checked`,
11641164
que estudaremos no <<ex_checked_class_top>> do <<ch_class_metaprog>>:
@@ -1745,7 +1745,7 @@ do <<ch_ifaces_prot_abc>>.
17451745
O sistema de tipos de Python é um campo imenso e em rápida expansão. Este
17461746
capítulo não é abrangente. Escolhi me concentrar em tópicos que são
17471747
amplamente aplicáveis, ou particularmente complexos, ou conceitualmente
1748-
importantes, e que assim provavelmente se manterão relevantes por mais
1748+
importantes, e que provavelmente serão relevantes por mais
17491749
tempo.
17501750
17511751
====

online/cap17.adoc

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ include::../code/17-it-generator/sentence.py[tags=SENTENCE_SEQ]
105105
<1> `.findall` devolve a lista com todos os trechos não sobrepostos
106106
correspondentes à expressão regular, como uma lista de strings.
107107

108-
<2> `self.words` mantém o resultado de `.findall`, então basta devolver a
108+
<2> `self.words` preserva o resultado de `.findall`, então basta devolver a
109109
palavra em um dado índice.
110110

111111
<3> Para completar o protocolo de sequência, implementamos `+__len__+`, apesar
@@ -630,7 +630,7 @@ ____
630630

631631
Para "suportar travessias múltiplas", deve ser possível obter múltiplos
632632
iteradores independentes a partir de um mesmo objeto iterável, e cada
633-
iterador deve manter seu próprio estado interno. Assim, uma implementação
633+
iterador deve preservar seu próprio estado interno. Assim, uma implementação
634634
adequada do padrão exige que cada invocação de `iter(meu_iterável)` crie um novo
635635
iterador independente. Por isso precisamos da classe
636636
`SentenceIterator` neste exemplo.
@@ -2133,7 +2133,7 @@ Após esse primeiro encontro com `yield from`, vamos olhar as dicas de tipo para
21332133
[[generic_iterable_types_sec]]
21342134
=== Tipos iteráveis genéricos
21352135

2136-
A((("generators", "generic iterable types")))((("iterators", "generic iterable types"))) bilbioteca padrão de Python contém muitas funções que aceitam argumentos iteráveis.
2136+
A((("generators", "generic iterable types")))((("iterators", "generic iterable types"))) biblioteca padrão de Python contém muitas funções que aceitam argumentos iteráveis.
21372137
Em seu código, tais funções podem ser anotadas como a função `zip_replace`, vista no <<replacer_ex>>,
21382138
usando `collections.abc.Iterable` (ou `typing.Iterable`, se você precisa suporta Python 3.8 ou anterior, como explicado no <<legacy_deprecated_typing_box>>). Veja o <<replacer_iterable_ex>>.
21392139

@@ -2317,10 +2317,19 @@ Vamos ver agora como as corrotinas clássicas funcionam.
23172317

23182318
==== Exemplo: Corrotina para computar uma média móvel
23192319

2320-
Quando((("coroutines", "computing running averages", id="CRavg17")))((("running averages, computing", id="runavg17")))((("averages, computing", id="avg17"))) discutimos clausuras no <<ch_closure_decorator>>,
2321-
estudamos objetos para computar uma média móvel.
2322-
O <<ex_average_oo>> mostra uma classe e o <<ex_average_fixed>> apresenta uma função de ordem superior devolvendo uma função que mantem as variáveis `total` e `count` entre invocações, em uma clausura.
2323-
O <<ex_coroaverager>> mostra como fazer o mesmo com uma corrotina.footnote:[Este exemplo foi inspirado por um trecho enviado por Jacob Holm à lista Python-ideas, em uma mensagem intitulada https://fpy.li/17-20[_Yield-From: Finalization guarantees_] (Yield-From: Garantias de finalização). Algumas variantes aparecem mais tarde na mesma thread, e Holm dá mais explicações sobre suas ideia na https://fpy.li/17-21[«mensagem 003912»].]
2320+
Quando((("coroutines", "computing running averages", id="CRavg17")))((("running averages, computing",
2321+
id="runavg17")))((("averages, computing", id="avg17")))
2322+
discutimos clausuras no <<ch_closure_decorator>>, estudamos objetos para
2323+
computar uma média móvel. O <<ex_average_oo>> mostra uma classe e o
2324+
<<ex_average_fixed>> apresenta uma função de ordem superior devolvendo uma
2325+
função que preserva as variáveis `total` e `count` entre invocações, em uma
2326+
clausura. O <<ex_coroaverager>> mostra como fazer o mesmo com uma
2327+
corrotina.footnote:[Este exemplo foi inspirado por um trecho enviado por Jacob
2328+
Holm à lista Python-ideas, em uma mensagem intitulada
2329+
https://fpy.li/17-20[_Yield-From: Finalization guarantees_] (Yield-From:
2330+
Garantias de finalização). Algumas variantes aparecem mais tarde na mesma
2331+
thread, e Holm dá mais explicações sobre suas ideia na
2332+
https://fpy.li/17-21[«mensagem 003912»].]
23242333

23252334
[[ex_coroaverager]]
23262335
.coroaverager.py: corrotina para computar uma média móvel
@@ -2350,7 +2359,7 @@ Em uma corrotina, `total` e `count` podem ser variáveis locais:
23502359
não precisamos usar atributos de uma instância ou uma clausura para preservar o contexto
23512360
enquanto a corrotina está suspensa, esperando pelo próximo `.send()`.
23522361
Por isso as corrotinas são substitutas atraentes para _callbacks_
2353-
em programação assíncrona—elas mantêm o estado local entre ativações.
2362+
em programação assíncrona—elas preservam o estado local entre ativações.
23542363

23552364
O <<ex_coroaverager_test>> executa doctests mostrando a corrotina `averager` em operação.
23562365

@@ -2696,7 +2705,7 @@ lista de pagamentos ao longo do tempo. Há também a seção
26962705
https://fpy.li/9h[_Receitas com itertools_], com funções adicionais de alto
26972706
desempenho, usando as funções de `itertools` como base.
26982707

2699-
Além da bilbioteca padrão de Python, recomendo o pacote
2708+
Além da biblioteca padrão de Python, recomendo o pacote
27002709
https://fpy.li/17-30[_More Itertools_], que continua a bela tradição do
27012710
`itertools`, oferecendo geradores poderosos, acompanhadas de muitos exemplos e
27022711
várias receitas úteis.

online/cap18.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -765,7 +765,7 @@ semelhante ao módulo `builtins` do Python.
765765
A((("lis.py interpreter", "Environment class", id="lispyenv18"))) classe
766766
`Environment` estende `collections.ChainMap`, acrescentando o método `change`,
767767
para atualizar um valor dentro de um dos dicts encadeados que as instâncias de
768-
`ChainMap` mantém em uma lista de mapeamentos no atributo `self.maps`. O método
768+
`ChainMap` guardam no atributo `self.maps`, que é lista de mapeamentos. O método
769769
`change` é necessário para suportar a instrução `(set! …)` do Scheme, descrita mais
770770
tarde.
771771

@@ -1199,7 +1199,7 @@ local.
11991199
Ambos, `nonlocal` e `(set! …)`, são necessários para atualizar o estado do
12001200
programa mantido em variáveis dentro de uma clausura. O
12011201
<<ex_average_fixed>> demonstrou o uso de `nonlocal` para implementar uma função
1202-
que calcula uma média contínua, mantendo itens `count` e `total` em uma
1202+
que calcula uma média contínua, preservando os itens `count` e `total` em uma
12031203
clausura. Aqui está a mesma ideia, escrita no subconjunto de Scheme de _lis.py_:
12041204
12051205
[source, scheme]

online/cap19.adoc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -642,7 +642,7 @@ Considere a função `is_prime` no <<def_is_prime_ex>>,
642642
que retorna `True` se o argumento for um número primo, `False` se não for.
643643

644644
[[def_is_prime_ex]]
645-
.primes.py: uma checagem de números primos fácil de entender, do exemplo em https://fpy.li/aa[pass:[<code>ProcessPool&#x200b;Executor</code>] na documentação de Python]
645+
.primes.py: uma checagem de números primos fácil de entender, do exemplo em https://fpy.li/aa[`ProcessPoolExecutor`] na documentação de Python]
646646
====
647647
[source, python]
648648
----
@@ -668,7 +668,7 @@ ____
668668

669669
Antes de executar o código ou continuar lendo,
670670
recomendo chegar as respostas por você mesmo.
671-
Depois, copie e modifique os exemplos pass:[<em>spinner_*.py</em>] como sugerido.
671+
Depois, copie e modifique os exemplos _spinner_ como sugerido.
672672

673673
Agora as respostas, da mais fácil para a mais difícil.
674674

@@ -901,7 +901,7 @@ include::../code/19-concurrency/primes/procs.py[tags=PRIMES_PROC_TOP]
901901
<1> Na tentativa de emular `threading`, `multiprocessing` fornece `multiprocessing.SimpleQueue`, mas esse é um método vinculado a uma instância pré-definida de uma classe de nível mais baixo, `BaseContext`.
902902
Temos que chamar essa `SimpleQueue` para criar uma fila. Mas não podemos usá-la em dicas de tipo.
903903
<2> `multiprocessing.queues` contém a classe `SimpleQueue` que precisamos para dicas de tipo.
904-
<3> `PrimeResult` inclui o número checado. Manter `n` junto com os outros campos do resultado simplifica a exibição mais tarde.
904+
<3> `PrimeResult` inclui o número checado. Preservar `n` com os outros campos do resultado simplifica a exibição mais tarde.
905905
<4> Isso é um apelido de tipo para uma `SimpleQueue` que a função `main` (<<primes_procs_main_ex>>) vai usar para enviar os números para os processos que farão a checagem.
906906
<5> Apelido de tipo para uma segunda `SimpleQueue` que vai coletar os resultados em `main`. Os valores na fila serão tuplas contendo o número a ser testado e uma tupla `Result`.
907907
<6> Isso é similar a _sequential.py_.
@@ -1728,7 +1728,7 @@ capitulo. Então temos aqui exemplos dos dois pecados descritos pelo Prof. Simon
17281728
usar palavras diferentes para se referir à mesma coisa, e usar uma palavra para
17291729
se referir a coisas diferentes.]
17301730
1731-
* Um ator pode manter um estado interno, mas não pode compartilhar esse estado com outros atores.
1731+
* Um ator pode ter um estado interno, mas não pode compartilhar esse estado com outros atores.
17321732
* Atores só podem se comunicar enviando e recebendo mensagens.
17331733
* Mensagens só contém cópias de dados, e não referências para dados mutáveis.
17341734
* Um ator só processa uma mensagem de cada vez. Não há execução concorrente dentro de um único ator.

0 commit comments

Comments
 (0)