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: online/cap15.adoc
+8-7Lines changed: 8 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -840,7 +840,7 @@ implementação mais simples, produzindo strings diretamente, sem passar pelo
840
840
seria necessário.]
841
841
842
842
Aqui está outro exemplo com `cast`, desta vez para corrigir uma dica de tipo
843
-
desatualizada na biblioteca padrão de Python. No <<ex_tcp_mojifinder_main>>, criei
843
+
desatualizada na biblioteca padrão de Python. No <<ex_tcp_mojifinder_main>> do <<ch_async>>, criei
844
844
um objeto `asyncio.Server`, e queria obter o endereço onde o servidor está
845
845
ouvindo (aceitando conexões). Escrevi esta linha de código:
846
846
@@ -892,7 +892,7 @@ seguro.
892
892
A leitora atenta pode ter notado que `sockets[0]` poderia gerar um `IndexError`
893
893
se `sockets` estiver vazio.
894
894
Entretanto, até onde entendo o `asyncio`, isso não pode acontecer no
895
-
<<ex_tcp_mojifinder_main>>, pois no momento em que leio o atributo `sockets`, o
895
+
<<ex_tcp_mojifinder_main>> do <<ch_async>>, pois no momento em que leio o atributo `sockets`, o
896
896
`server` já está pronto para aceitar conexões , portanto o atributo não estará
897
897
vazio. E, de qualquer forma, `IndexError` ocorre durante a execução. O Mypy não
898
898
consegue localizar esse problema nem mesmo em um caso trivial como
@@ -1161,7 +1161,7 @@ Dada a instabilidade da situação atual, se você precisar ler anotações dura
1161
1161
pass:[<code>in​spect​.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.
1162
1162
1163
1163
Para demonstrar esse segundo ponto, aqui estão as primeiras linhas da classe `Checked`,
1164
-
que estudaremos no <<ex_checked_class_top>>:
1164
+
que estudaremos no <<ex_checked_class_top>> do <<ch_class_metaprog>>:
1165
1165
1166
1166
[source, python]
1167
1167
----
@@ -1188,7 +1188,9 @@ As seções restantes desse capítulo cobrem tipos genéricos, começando pela f
1188
1188
[[impl_generic_class_sec]]
1189
1189
=== Implementando uma classe genérica
1190
1190
1191
-
No((("gradual type system", "implementing generic classes", id="GTSgeneric15")))((("classes", "implementing generic classes", id="CAPgeneric15")))((("generic classes, implementing", id="genclasimp15"))) <<ex_tombola_abc>>, definimos a ABC `Tombola`: uma interface para classes que funcionam como um recipiente para sorteio de bingo. A classe `LottoBlower` do <<ex_lotto>> é uma implementação concreta.
definimos a ABC `Tombola`: uma interface para classes que funcionam como um recipiente para sorteio de bingo. A classe `LottoBlower` (<<ex_lotto>> do <<ch_ifaces_prot_abc>>) é uma implementação concreta.
1192
1194
Vamos agora estudar uma versão genérica de `LottoBlower`, usada da forma que aparece no <<ex_generic_lotto_demo>>.
1193
1195
1194
1196
@@ -1665,7 +1667,7 @@ De acordo com o https://fpy.li/15-35[_typeshed_],
1665
1667
`+int.__abs__+` devolve um `int`, o que é _consistente-com_ o parametro de tipo `float` declarado na dica de tipo `is_unit` para o argumento `v`.
1666
1668
1667
1669
De forma similar, podemos escrever uma versão genérica do protocolo
1668
-
`RandomPicker`, apresentado na <<ex_randompick_protocol>>, que foi definido com
1670
+
`RandomPicker`, apresentado no <<ex_randompick_protocol>> do <<ch_ifaces_prot_abc>>, que foi definido com
1669
1671
um único método `pick` devolvendo `Any`.
1670
1672
1671
1673
O <<ex_generic_randompick_protocol>> mostra como criar um `RandomPicker`
@@ -1898,9 +1900,8 @@ não-documentada `TransportSocket` no módulo igualmente não documentado
1898
1900
incorreto, pois esse último não é subtipo do primeiro, como explicitado em uma
1899
1901
https://fpy.li/15-52[docstring] no código-fonte.
1900
1902
1901
-
1902
1903
Caí em uma toca de coelho similar quando acrescentei dicas de tipo ao
1903
-
<<ex_primes_procs_top>>, uma demonstração simples de `multiprocessing`.
1904
+
<<ex_primes_procs_top>> do <<ch_concurrency_models>>, uma demonstração simples de `multiprocessing`.
Copy file name to clipboardExpand all lines: online/cap17.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
@@ -729,7 +729,7 @@ Expressões geradoras são "açúcar sintático": elas pode sempre ser substitu
729
729
730
730
=== Quando usar expressões geradoras
731
731
732
-
Eu((("generators", "when to use generator expressions")))((("generator expressions (genexps)"))) usei várias expressões geradoras quando implementamos a classe `Vector` no <<ex_vector_v5>>. Cada um destes métodos contém uma expressão geradora: `+__eq__+`, `+__hash__+`, `+__abs__+`, `angle`, `angles`, pass:[<span class="keep-together"><code>format</code></span>], `+__add__+`, e `+__mul__+`.
732
+
Eu((("generators", "when to use generator expressions")))((("generator expressions (genexps)"))) usei várias expressões geradoras quando implementamos a classe `Vector` no <<ex_vector_v5>> do <<ch_seq_methods>>. Cada um destes métodos contém uma expressão geradora: `+__eq__+`, `+__hash__+`, `+__abs__+`, `angle`, `angles`, pass:[<span class="keep-together"><code>format</code></span>], `+__add__+`, e `+__mul__+`.
733
733
// has a generator expression.
734
734
Em todos aqueles métodos, uma compreensão de lista também funcionaria, com um custo adicional de memória para armazenar os valores da lista intermediária.
735
735
@@ -743,7 +743,7 @@ Minha regra básica para escolher qual sintaxe usar é simples: se a expressão
743
743
[TIP]
744
744
.Dica de sintaxe
745
745
====
746
-
Quando uma expressão geradora é passada como único argumento a uma função ou a um construtor, não é necessário escrever um conjunto de parênteses para a chamada da função e outro par cercando a expressão geradora. Um único par é suficiente, como na chamada a `Vector` no método `+__mul__+` do <<ex_vector_v5>>, reproduzido abaixo:
746
+
Quando uma expressão geradora é passada como único argumento a uma função ou a um construtor, não é necessário escrever um conjunto de parênteses para a chamada da função e outro par cercando a expressão geradora. Um único par é suficiente, como na chamada a `Vector` no método `+__mul__+` do <<ex_vector_v5>> do <<ch_seq_methods>>, reproduzido abaixo:
Copy file name to clipboardExpand all lines: online/cap22.adoc
+3-1Lines changed: 3 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -253,7 +253,9 @@ Nossa próxima tarefa é reestruturar os dados para preparar a recuperação aut
253
253
[[computed_props_sec]]
254
254
=== Propriedades computadas
255
255
256
-
Vimos inicialmente o decorador `@property` no <<ch_pythonic_obj>>, na <<hashable_vector2d_sec>>. No <<ex_vector2d_v3>>, usei duas propriedades no `Vector2d` apenas para tornar os atributos `x` e `y` apenas para leitura.
256
+
Vimos inicialmente o decorador `@property` na <<hashable_vector2d_sec>>.
257
+
No <<ex_vector2d_v3>> do <<ch_pythonic_obj>>,
258
+
usei duas propriedades no `Vector2d` apenas para tornar os atributos `x` e `y` apenas para leitura.
257
259
Aqui vamos ver propriedades que calculam valores, levando a uma discussão sobre como armazenar tais valores.
258
260
259
261
Os((("computed properties", "properties that compute values")))((("dynamic attributes and properties", "computed properties", id="DAPcomputp22"))) registros na lista `'events'` dos dados JSON da OSCON contêm números de série inteiros apontando para registros nas listas `'speakers'` e `'venues'`.
Em alguns casos, a metaprogramação de classes também pode ajudar em questões de desempenho, executando tarefas no momento da importação que de outra forma seriam executadas repetidamente durante a execução.
1325
1325
1326
-
Para finalizar, vamos nos lembrar do conselho final de Alex Martelli em seu ensaio <<waterfowl_essay>>:
1326
+
Para finalizar, vamos nos lembrar do conselho final de Alex Martelli em seu ensaio <<waterfowl_essay>>
0 commit comments