Skip to content

Commit 1d2421e

Browse files
committed
cap08: rev LR
1 parent 61a92f4 commit 1d2421e

File tree

15 files changed

+421
-237
lines changed

15 files changed

+421
-237
lines changed

capitulos/cap01.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ Card(rank='Q', suit='hearts')
252252
Sempre((("doctest package", "ellipsis in")))((("ellipsis (…)")))((("… (ellipsis)"))) que possível,
253253
extraí as listagens do console de Python usadas neste livro com o
254254
https://fpy.li/2e[`doctest`], para garantir a precisão.
255-
Quando a saída era longa demais, a parte omitida está marcada por reticências (`...`),
255+
Quando a saída era longa demais, a parte omitida está marcada por reticências (`\...`),
256256
como na última linha do trecho de código anterior.
257257
258258
Nesse casos, usei((("+ELLIPSIS directive"))) a diretiva `# doctest: +ELLIPSIS`

capitulos/cap02.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1446,9 +1446,9 @@ eu não escrevi ao contrário: o nome da classe `ellipsis` realmente se escreve
14461446
e a instância é um objeto embutido chamado `Ellipsis`,
14471447
da mesma forma que `bool` é em minúsculas mas suas instâncias são `True` e `False`.]
14481448
Dessa forma, ele pode ser passado como argumento para funções e como parte da especificação de uma fatia,
1449-
como em `f(a, \..., z)` ou `a[i:\...]`.
1449+
como em `f(a, \..., z)` ou `a[i:\\...]`.
14501450
O NumPy usa `\...` como atalho ao fatiar arrays com muitas dimensões;
1451-
por exemplo, se `x` é um array com quatro dimensões, `x[i, \...]` é um atalho para `x[i, :, :, :,]`.
1451+
por exemplo, se `x` é um array com quatro dimensões, `x[i, \\...]` é um atalho para `x[i, :, :, :,]`.
14521452
Veja https://fpy.li/2-13["NumPy quickstart"] (EN)
14531453
para saber mais sobre isso.
14541454

capitulos/cap06.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ quando se comparam coleções grandes ou estruturas aninhadas com muitos níveis
329329
====
330330
Normalmente estamos mais interessados na igualdade que na identidade de objetos.
331331
Checar se o objeto é `None` é _o único_ caso de uso comum do operador `is`.
332-
A maioria dos outros usos que eu vejo quando reviso código estão errados.
332+
A maioria dos outros usos que vejo quando reviso código estão errados.
333333
Se você não estiver seguro, use `==`. Em geral, é o que você quer,
334334
e ele também funciona com `None`, ainda que não tão rápido.
335335
====

capitulos/cap07.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -881,7 +881,7 @@ Lisp, entretanto, não limita o que pode ser feito dentro de uma `lambda`, pois
881881
Python usa uma sintaxe orientada a instruções (_statement oriented syntax_),
882882
na qual as expressões não podem conter instruções,
883883
e muitas das estruturas da linguagem são instruções--incluindo `try/catch`,
884-
que é o que eu mais sinto falta quando escrevo uma `lambda`.
884+
que é o que mais sinto falta quando escrevo uma `lambda`.
885885
É o preço a pagar pela sintaxe extremamente legível de Python.footnote:[Há também o problema da perda de indentação quando colamos trechos de código em fóruns na Web, mas isso é outro assunto.] Lisp tem muitas virtudes, mas legibilidade não é uma delas.
886886
887887
Ironicamente, roubar a sintaxe de compreensão de lista de outra linguagem funcional—Haskell—reduziu significativamente a necessidade de usar `map` e `filter`, e também `lambda`.

capitulos/cap08.adoc

Lines changed: 397 additions & 213 deletions
Large diffs are not rendered by default.

capitulos/cap12.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ Exceto pela nova assinatura do construtor, me assegurei que todos os testes real
7070
[WARNING]
7171
====
7272
Quando um `Vector` tem mais de seis componentes, a string produzida por `repr()` é abreviada com
73-
`...`, como visto na última linha do <<ex_vector_demo>>. Isso é fundamental para qualquer tipo de coleção que possa conter um número grande de itens, pois `repr` é usado na depuração—e você não quer que um único objeto grande ocupe milhares de linhas em seu console ou arquivo de log. Use o módulo `reprlib` para produzir representações de tamanho limitado, como no <<ex_vector_v1>>. O módulo `reprlib` se chamava `repr` no Python 2.7.
73+
`\...`, como visto na última linha do <<ex_vector_demo>>. Isso é fundamental para qualquer tipo de coleção que possa conter um número grande de itens, pois `repr` é usado na depuração—e você não quer que um único objeto grande ocupe milhares de linhas em seu console ou arquivo de log. Use o módulo `reprlib` para produzir representações de tamanho limitado, como no <<ex_vector_v1>>. O módulo `reprlib` se chamava `repr` no Python 2.7.
7474
====
7575

7676
O <<ex_vector_v1>> lista a implementação de nossa primeira versão de `Vector` (esse exemplo usa como base o código mostrado no pass:[<a data-type="xref" href="#ex_vector2d_v0" data-xrefstyle="select: labelnumber">#ex_vector2d_v0</a>] e no pass:[<a data-type="xref" href="#ex_vector2d_v1" data-xrefstyle="select: labelnumber">#ex_vector2d_v1</a>] do <<ch_pythonic_obj>>).
@@ -801,7 +801,7 @@ Um &#x5f;&#x5f;format&#x5f;&#x5f; seguro, com usabilidade aperfeiçoada
801801
Ao((("&#x005F;&#x005F;format&#x005F;&#x005F;")))((("Soapbox sidebars", "&#x005F;&#x005F;format&#x005F;&#x005F;", secondary-sortas="format"))) implementar `+__format__+`, não tomei qualquer precaução a respeito de instâncias de `Vector` com um número muito grande de componentes, como fizemos no `+__repr__+` usando `reprlib`. A justificativa é que `repr()` é usado para depuração e registro de logs, então precisa sempre gerar uma saída minimamente aproveitável, enquanto
802802
`+__format__+` é usado para exibir resultados para usuários finais, que presumivelmente desejam ver o `Vector` inteiro. Se isso for considerado inconveniente, então seria legal implementar um nova extensão à Minilinguagem de especificação de formato.
803803
804-
O quê eu faria: por default, qualquer `Vector` formatado mostraria um número razoável mas limitado de componentes, digamos uns 30. Se existirem mais elementos que isso, o comportamento default seria similar ao de `reprlib`: cortar o excesso e colocar `...` em seu lugar. Entretanto, se o especificador de formato terminar com um código especial `+*+`, significando "all" (_todos_), então a limitação de tamanho seria desabilitada. Assim, um usuário ignorante do problema de exibição de vetores muito grandes não será acidentalmente penalizado. Mas se a limitação default se tornar incômoda, a presença das `...` iria incentivar o usuário a consultar a documentação e descobrir o código de formatação `*` .
804+
O quê eu faria: por default, qualquer `Vector` formatado mostraria um número razoável mas limitado de componentes, digamos uns 30. Se existirem mais elementos que isso, o comportamento default seria similar ao de `reprlib`: cortar o excesso e colocar `\...` em seu lugar. Entretanto, se o especificador de formato terminar com um código especial `+*+`, significando "all" (_todos_), então a limitação de tamanho seria desabilitada. Assim, um usuário ignorante do problema de exibição de vetores muito grandes não será acidentalmente penalizado. Mas se a limitação default se tornar incômoda, a presença das `\...` iria incentivar o usuário a consultar a documentação e descobrir o código de formatação `*` .
805805
806806
807807
[role="soapbox-title"]

capitulos/cap13.adoc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ Então, a partir dessa analogia bem frouxa com as revoluções taxonômicas no m
490490
491491
A _goose typing_ significa o seguinte: `isinstance(obj, cls)` agora é plenamente aceitável... desde que `cls` seja uma classe base abstrata - em outras palavras, a metaclasse de ++cls++ é `abc.ABCMeta`.
492492
493-
Você vai encontrar muitas classes abstratas prontas em `collections.abc` (e outras no módulo `numbers` da _Biblioteca Padrão de Python_)footnote:[Você também pode, claro, definir suas próprias ABCs - mas eu não recomendaria esse caminho a ninguém, exceto aos mais avançados pythonistas, da mesma forma que eu os desencorajaria de definir suas próprias metaclasses customizadas... e mesmo para os ditos "mais avançados pythonistas", aqueles de nós que exibem o domínio de todos os recantos por mais obscuros da linguagem, essas não são ferramentas de uso frequente. Este tipo de "metaprogramação profunda", se alguma vez for apropriada, o será no contexto dos autores de frameworks abrangentes, projetadas para serem estendidas de forma independente por inúmeras equipes de desenvolvimento diferentes... menos que 1% dos "mais avançados pythonistas" precisará disso alguma vez na vida! - _A.M_]
493+
Você vai encontrar muitas classes abstratas prontas em `collections.abc` (e outras no módulo `numbers` da _Biblioteca Padrão de Python_)footnote:[Você também pode, claro, definir suas próprias ABCs - mas eu não recomendaria esse caminho a ninguém, exceto aos mais avançados pythonistas, da mesma forma que os desencorajaria de definir suas próprias metaclasses customizadas... e mesmo para os ditos "mais avançados pythonistas", aqueles de nós que exibem o domínio de todos os recantos por mais obscuros da linguagem, essas não são ferramentas de uso frequente. Este tipo de "metaprogramação profunda", se alguma vez for apropriada, o será no contexto dos autores de frameworks abrangentes, projetadas para serem estendidas de forma independente por inúmeras equipes de desenvolvimento diferentes... menos que 1% dos "mais avançados pythonistas" precisará disso alguma vez na vida! - _A.M_]
494494
495495
Dentre as muitas vantagens conceituais das ABCs sobre classes concretas
496496
(e.g., Scott Meyer’s “toda classe não-final (não-folha) deveria ser abstrata”; veja o https://fpy.li/13-12[Item 33] de seu livro, _More Effective {cpp}_, Addison-Wesley), as ABCs de Python acrescentam uma grande vantagem prática: o método de classe `register`, que permite ao código do usuário final "declarar" que determinada classe é uma subclasse "virtual" de uma ABC (para este propósito, a classe registrada precisa cumprir os requerimentos de nome de métodos e assinatura da ABC e, mais importante, o contrato semântico subjacente - mas não precisa ter sido desenvolvida com qualquer conhecimento da ABC, e especificamente não precisa herdar dela!).
@@ -1122,7 +1122,7 @@ e ainda ter um classe sem qualquer relação passando uma verificação de `issu
11221122
(ou porque ela faz o que quer que seja necessário para convencer um `+__subclasshook__+` a dar a ela seu aval).
11231123

11241124
É uma boa ideia implementar `+__subclasshook__+` em nossas próprias ABCs? Provavelmente não.
1125-
Todas as implementações de `+__subclasshook__+` que eu vi no código-fonte de Python estão em ABCs como `Sized`, que declara apenas um método especial, e elas simplesmente verificam a presença do nome daquele método especial.
1125+
Todas as implementações de `+__subclasshook__+` que vi no código-fonte de Python estão em ABCs como `Sized`, que declara apenas um método especial, e elas simplesmente verificam a presença do nome daquele método especial.
11261126
Dado seu status "especial", é quase certeza que qualquer método chamado `+__len__+` faz o que se espera.
11271127
Mas mesmo no reino dos métodos especiais e ABCs fundamentais,
11281128
pode ser arriscado fazer tais suposições.
@@ -1327,7 +1327,7 @@ então o Mypy pode inferir que dentro do bloco `if`, o tipo do objeto `o` é _co
13271327
Durante((("duck typing"))) a execução, muitas vezes o duck typing é a melhor abordagem para checagem de tipos:
13281328
em vez de chamar `isinstance` ou `hasattr`, apenas tente realizar as operações que você precisa com o objeto, e trate as exceções conforme necessário. Aqui está um exemplo concreto:
13291329
1330-
Continuando a discussão anterior: dado um objeto `o` que eu preciso usar como número complexo,
1330+
Continuando a discussão anterior: dado um objeto `o` que preciso usar como número complexo,
13311331
essa seria uma abordagem:
13321332
13331333
[source, python]
@@ -1967,7 +1967,7 @@ Eles está falando de interface de usuário, mas a advertência se aplica també
19671967
Mas Cooper admite que quando uma metáfora "verdadeiramente apropriada" "cai no nosso colo," podemos usá-la (ele escreve "cai no nosso colo" porque é tão difícil encontrar metáforas adequadas que ninguém deveria perder tempo tentando encontrá-las ativamente).
19681968
Acredito que a imagem da máquina de bingo que usei nesse capítulo é apropriada e eu a defenderei.
19691969
1970-
_About Face_ é, de longe, o melhor livro sobre design de UI que eu já li - e eu li uns tantos.
1970+
_About Face_ é, de longe, o melhor livro sobre design de UI que já li - e eu li uns tantos.
19711971
Abandonar as metáforas como paradigmas de design, as substituindo por "interfaces idiomáticas", foi a lição mais valiosa que aprendi com o trabalho de Cooper.
19721972
19731973
Em _About Face_, Cooper não lida com APIs, mas quanto mais penso em suas ideias, mais vejo como se aplicam ao Python.

capitulos/cap15.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def sum(__iterable: Iterable[_T], start: _S) -> Union[_T, _S]: ...
6161
Primeiro, vamos olhar a sintaxe geral das sobreposições.
6262
Esse acima é todo o código sobre `sum` que você encontrará no arquivo stub (_.pyi_).
6363
A implementação estará em um arquivo diferente.
64-
As reticências (`...`) não tem qualquer função além de cumprir a exigência sintática para um corpo de função, como no caso de `pass`.
64+
As reticências (`\...`) não tem qualquer função além de cumprir a exigência sintática para um corpo de função, como no caso de `pass`.
6565
Assim os arquivos _.pyi_ são arquivos Python válidos.
6666

6767
Como mencionado na <<arbitrary_arguments_sec>>, os dois sublinhados prefixando `+__iterable+` são a convenção da PEP 484 para argumentos apenas posicionais, que é verificada pelo Mypy.

capitulos/cap17.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ said
106106
----
107107
====
108108
<1> Uma sentença criada a partir de uma string.
109-
<2> Observe a saída de `+__repr__+` gerada por `reprlib.repr`, usando `...`.
109+
<2> Observe a saída de `+__repr__+` gerada por `reprlib.repr`, usando `\...`.
110110
<3> Instâncias de `Sentence` são iteráveis; veremos a razão em seguida.
111111
<4> Sendo iteráveis, objetos `Sentence` podem ser usados como entrada para criar listas e outros tipos iteráveis.
112112
@@ -2195,7 +2195,7 @@ Essa alegre discussão sobre variância encerra o capítulo mais longo do livro.
21952195
21962196
=== Resumo do capítulo
21972197
2198-
A iteração((("iterators", "overview of")))((("generators", "overview of")))((("coroutines", "overview of"))) está integrada tão profundamente à linguagem que eu gosto de dizer que Python _groks_ iteradoresfootnote:[De acordo com o https://fpy.li/17-26[Jargon file] (EN), _to grok_ não é meramente aprender algo, mas absorver de uma forma que "aquilo se torna parte de você, parte de sua identidade".]
2198+
A iteração((("iterators", "overview of")))((("generators", "overview of")))((("coroutines", "overview of"))) está integrada tão profundamente à linguagem que gosto de dizer que Python _groks_ iteradoresfootnote:[De acordo com o https://fpy.li/17-26[Jargon file] (EN), _to grok_ não é meramente aprender algo, mas absorver de uma forma que "aquilo se torna parte de você, parte de sua identidade".]
21992199
A integração do padrão _Iterator_ na semântica de Python é um exemplo perfeito de como padrões de projeto não são aplicáveis a todas as linguagens de programação.
22002200
No Python, um _Iterator_ clássico, implementado "à mão", como no <<ex_sentence1>>, não tem qualquer função prática, exceto como exemplo didático.
22012201

capitulos/cap18.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ Resumindo, o mapeamento `env` é carregado com:
550550
O((("lis.py interpreter", "REPL (read-eval-print-loop)"))) REPL (read-eval-print-loop, _loop-lê-calcula-imprime_ ) de Norvig é fácil de entender mas não é amigável ao usuário (veja o <<ex_lispy_repl>>).
551551
Se nenhum argumento de linha de comando é passado a _lis.py_,
552552
a função `repl()` é invocada por `main()`—definida no final do módulo.
553-
No prompt de `lis.py>`, devemos digitar expressões corretas e completas; se esquecemos de fechar um só parênteses, _lis.py_ se encerra.footnote:[Enquanto estudava o _lis.py_ e o _lispy.py_ de Norvig, comecei uma versão chamada https://fpy.li/18-20[_mylis_], que acrescenta alguns recursos, incluindo um REPL que aceita expressões-S parciais e espera a continuação, como o REPL de Python sabe que não terminamos e apresenta um prompt secundário (`...`) até entrarmos uma expressão ou instrução completa, que possa ser analisada e avaliada. O _mylis_ também trata alguns erros de forma graciosa, mas ele ainda é fácil de quebrar. Não é nem de longe tão robusto quanto o REPL de Python.]
553+
No prompt de `lis.py>`, devemos digitar expressões corretas e completas; se esquecemos de fechar um só parênteses, _lis.py_ se encerra.footnote:[Enquanto estudava o _lis.py_ e o _lispy.py_ de Norvig, comecei uma versão chamada https://fpy.li/18-20[_mylis_], que acrescenta alguns recursos, incluindo um REPL que aceita expressões-S parciais e espera a continuação, como o REPL de Python sabe que não terminamos e apresenta um prompt secundário (`\...`) até entrarmos uma expressão ou instrução completa, que possa ser analisada e avaliada. O _mylis_ também trata alguns erros de forma graciosa, mas ele ainda é fácil de quebrar. Não é nem de longe tão robusto quanto o REPL de Python.]
554554

555555
[role="pagebreak-before less_space"]
556556
[[ex_lispy_repl]]

0 commit comments

Comments
 (0)