Skip to content

Commit abd8742

Browse files
committed
xrefs para outros volumes resolvidas
1 parent c1c07a2 commit abd8742

File tree

7 files changed

+124
-79
lines changed

7 files changed

+124
-79
lines changed

print/xrefs/xvol_replacer.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#!/usr/bin/env python
2+
3+
import sys
4+
import os
5+
import tempfile
6+
import shutil
7+
8+
def load_replacements(mapping_file):
9+
replacements = []
10+
with open(mapping_file, 'r') as f:
11+
for line in f:
12+
line = line.strip()
13+
if not line or line.startswith('#'):
14+
continue
15+
old, new = line.split(maxsplit=1)
16+
replacements.append((old, new))
17+
return replacements
18+
19+
def replace_in_file(file_path, replacements):
20+
with tempfile.NamedTemporaryFile(mode='w', delete=False) as temp_file:
21+
temp_filename = temp_file.name
22+
with open(file_path, 'r') as original_file:
23+
content = original_file.read()
24+
for old_text, new_text in replacements:
25+
content = content.replace(old_text, new_text)
26+
temp_file.write(content)
27+
shutil.move(temp_filename, file_path)
28+
29+
def main():
30+
if len(sys.argv) < 3:
31+
print("xvol_replacer.py mapping_file.tsv file1.txt file2.txt ...")
32+
sys.exit(1)
33+
34+
mapping_file = sys.argv[1]
35+
target_files = sys.argv[2:]
36+
37+
replacements = load_replacements(mapping_file)
38+
39+
for file_path in target_files:
40+
if os.path.exists(file_path) and not os.path.isdir(file_path):
41+
replace_in_file(file_path, replacements)
42+
43+
if __name__ == "__main__":
44+
main()

vol1/cap01.adoc

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ startref="len01")))((("", startref="pycard01")))((("", startref="SMgetitem01")))
324324
Como foi implementado até aqui, um `FrenchDeck` não pode ser embaralhado,
325325
porque as cartas e suas posições não podem ser alteradas,
326326
exceto violando o encapsulamento e manipulando o atributo `_cards` diretamente.
327-
No <<ch_ifaces_prot_abc>> vamos corrigir isso acrescentando um método `+__setitem__+`
327+
No Capítulo 13 [vol.2, fpy.li/4q] vamos corrigir isso acrescentando um método `+__setitem__+`
328328
de uma linha.
329329
Você consegue imaginar como ele seria implementado?
330330
=====================================================================
@@ -380,7 +380,7 @@ Na próxima seção veremos alguns dos usos mais importantes dos métodos especi
380380
Vários((("special methods", "emulating numeric types", id="SMnumeric01")))((("numeric types",
381381
"emulating using special methods", id="NTemul01")))
382382
métodos especiais permitem que objetos criados pelo usuário respondam a operadores como `+`.
383-
Vamos tratar disso com mais detalhes no <<ch_op_overload>>.
383+
Vamos tratar disso com mais detalhes no Capítulo 16 [vol.2, fpy.li/4r].
384384
Aqui nosso objetivo é continuar ilustrando o uso dos métodos especiais, através de outro exemplo simples.
385385

386386
Vamos((("vectors", "representing two-dimensional", id="Vtwo01"))) implementar uma classe para representar
@@ -391,7 +391,7 @@ vetores bi-dimensionais—isto é, vetores euclidianos como aqueles usados em ma
391391
======
392392
O tipo embutido `complex` pode ser usado para representar vetores bi-dimensionais,
393393
mas nossa classe pode ser estendida para representar vetores N-dimensionais.
394-
Faremos isso em <<ch_generators>>.
394+
Faremos isso em Capítulo 17 [vol.3, fpy.li/4s].
395395
======
396396

397397
[[vectors_fig]]
@@ -459,14 +459,14 @@ para demonstrar o uso básico de `+__add__+` e `+__mul__+`.
459459
No dois casos, os métodos criam e devolvem uma nova instância de `Vector`,
460460
e não modificam nenhum dos operandos: `self` e `other` são apenas lidos.
461461
Esse é o comportamento esperado de operadores infixos: criar novos objetos e não tocar em seus operandos.
462-
Vou falar mais sobre esse tópico no <<ch_op_overload>>.
462+
Vou falar mais sobre esse tópico no Capítulo 16 [vol.2, fpy.li/4r].
463463

464464
[WARNING]
465465
====
466466
Da forma como está implementado, o <<ex_vector2d>> permite multiplicar um `Vector` por um número,
467467
mas não um número por um `Vector`,
468468
violando a propriedade comutativa da multiplicação escalar.
469-
Vamos consertar isso com o método especial `+__rmul__+` no <<ch_op_overload>>.
469+
Vamos consertar isso com o método especial `+__rmul__+` no Capítulo 16 [vol.2, fpy.li/4r].
470470
====
471471

472472
Nas seções seguintes vamos discutir os outros métodos especiais em
@@ -585,7 +585,7 @@ id="SMcollection01")))((("Collection API", id="Cspeical01")))((("ABCs (abstract
585585
as interfaces dos tipos de coleções essenciais na linguagem.
586586
Todas as classes no diagrama são ABCs—_classes base abstratas_
587587
(_ABC_ é sigla para _Abstract Base Class_).
588-
As ABCs e o módulo `collections.abc` são tratados no <<ch_ifaces_prot_abc>>.
588+
As ABCs e o módulo `collections.abc` são tratados no Capítulo 13 [vol.2, fpy.li/4q].
589589
O objetivo dessa pequena seção é dar uma visão panorâmica das interfaces das coleções mais importantes de Python,
590590
mostrando como elas são criadas a partir de métodos especiais.
591591

@@ -670,7 +670,7 @@ Operadores infixos e numéricos são suportados pelos métodos especiais listado
670670
<<special_operators_tbl>>.
671671
Aqui os nomes mais recentes são `+__matmul__+`, `+__rmatmul__+`, e `+__imatmul__+`,
672672
adicionados no Python 3.5 para suportar o uso de `@` como operador de multiplicação de matrizes,
673-
como veremos no <<ch_op_overload>>.((("special methods", "special method names and symbols for operators")))
673+
como veremos no Capítulo 16 [vol.2, fpy.li/4r].((("special methods", "special method names and symbols for operators")))
674674

675675
[[special_operators_tbl]]
676676
.Nomes e símbolos de métodos especiais para operadores
@@ -693,7 +693,7 @@ Python invoca um método especial de operador reverso no segundo argumento
693693
quando o método especial correspondente não pode ser usado no primeiro operando.
694694
Atribuições aumentadas são atalho combinando um operador infixo com uma atribuição de variável, por exemplo `a += b`.
695695
696-
O <<ch_op_overload>> explica em detalhes os operadores reversos e a atribuição aumentada.((("", startref="PDMspmtov01")))
696+
O Capítulo 16 [vol.2, fpy.li/4r] explica em detalhes os operadores reversos e a atribuição aumentada.((("", startref="PDMspmtov01")))
697697
====
698698

699699

@@ -741,14 +741,14 @@ uma para depuração e registro (_log_), outra para apresentar aos usuários fin
741741
Emular sequências, como mostrado com o exemplo do `FrenchDeck`, é um dos usos mais comuns dos métodos especiais.
742742
Por exemplo, bibliotecas de banco de dados frequentemente devolvem resultados de consultas na forma de coleções similares a sequências.
743743
Tirar o máximo proveito dos tipos de sequências existentes é o assunto do <<ch_sequences>>.
744-
Como implementar suas próprias sequências será visto no <<ch_seq_methods>>,
744+
Como implementar suas próprias sequências será visto no Capítulo 12 [vol.2, fpy.li/4t],
745745
onde criaremos uma extensão multidimensional da classe `Vector`.
746746

747747
Graças à sobrecarga de operadores, Python oferece uma rica seleção de tipos numéricos,
748748
desde os tipos embutidos até `decimal.Decimal` e `fractions.Fraction`,
749749
todos eles suportando operadores aritméticos infixos.
750750
As bibliotecas de ciência de dados _NumPy_ suportam operadores infixos com matrizes e tensores.
751-
A implementação de operadores—incluindo operadores reversos e atribuição aumentada—será vista no <<ch_op_overload>>,
751+
A implementação de operadores—incluindo operadores reversos e atribuição aumentada—será vista no Capítulo 16 [vol.2, fpy.li/4r],
752752
usando melhorias do exemplo `Vector`.
753753

754754
Também veremos o uso e a implementação da maioria dos outros métodos especiais do Modelo de Dados de Python ao longo deste livro.

vol1/cap02.adoc

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ desde a conhecida `list` até os tipos `str` e `bytes`, adicionados no Python 3.
2929
Tópicos específicos sobre listas, tuplas, arrays e filas também foram incluídos,
3030
mas os detalhes sobre strings Unicode e sequências de bytes são tratados no <<ch_str_bytes>>.
3131
Além disso, a ideia aqui é falar sobre os tipos de sequências prontas para usar.
32-
A criação de novos tipos de sequência é o tema do <<ch_seq_methods>>.
32+
A criação de novos tipos de sequência é o tema do Capítulo 12 [vol.2, fpy.li/4t].
3333

3434
Os((("sequences", "topics covered"))) principais tópicos cobertos neste capítulo são:
3535

@@ -118,7 +118,7 @@ A <<sequence_uml>> ajuda a visualizar como as sequências mutáveis herdam todos
118118
das sequências imutáveis e implementam vários métodos adicionais.
119119
Os tipos embutidos de sequências na verdade não são subclasses das classes base abstratas (ABCs)
120120
`Sequence` e `MutableSequence`, mas sim _subclasses virtuais_ registradas com aquelas
121-
ABCs—como veremos no <<ch_ifaces_prot_abc>>.
121+
ABCs—como veremos no Capítulo 13 [vol.2, fpy.li/4q].
122122
Por serem subclasses virtuais, `tuple` e `list` passam nesses testes:
123123

124124
[source, python]
@@ -448,7 +448,7 @@ nunca é criada neste exemplo.
448448

449449
[NOTE]
450450
====
451-
O <<ch_generators>> explica em detalhes o funcionamento de geradoras.
451+
O Capítulo 17 [vol.3, fpy.li/4s] explica em detalhes o funcionamento de geradoras.
452452
A ideia aqui é apenas mostrar o uso de expressões geradores para inicializar sequências diferentes de listas,
453453
ou produzir uma saída que não precise ser mantida na memória.
454454
====
@@ -662,7 +662,7 @@ Entretanto, `reversed(my_tuple)` funciona sem esse método; ele serve apenas par
662662
| `+s.__len__()+` | ● | ● | `+len(s)+`—número de itens
663663
| `+s.__mul__(n)+` | ● | ● | `+s * n+`—concatenação repetida
664664
| `+s.__imul__(n)+` | ● | | `+s *= n+`—concatenação repetida no mesmo lugar
665-
| `+s.__rmul__(n)+` | ● | ● | `+n * s+`—concatenação repetida inversafootnote:[Operadores invertidos são explicados no <<ch_op_overload>>.]
665+
| `+s.__rmul__(n)+` | ● | ● | `+n * s+`—concatenação repetida inversafootnote:[Operadores invertidos são explicados no Capítulo 16 [vol.2, fpy.li/4r].]
666666
| `s.pop([p])` | ● | | Remove e devolve o último item ou o item na posição opcional `p`
667667
| `s.remove(e)` | ● | | Remove o primeiro elemento de valor igual a `e`
668668
| `s.reverse()` | ● | | Reverte, no lugar, a ordem dos itens
@@ -893,7 +893,7 @@ Você pode querer ler aquela revisão rápida.
893893
Neste livro, dividi o tratamento do casamento de padrões em diferentes capítulos,
894894
dependendo dos tipos de padrão:
895895
na <<pattern_matching_mappings_sec>> e na <<pattern_instances_sec>>.
896-
E há um exemplo mais longo na <<pattern_matching_case_study_sec>>.
896+
E há um exemplo mais longo na Seção 18.3 [vol.3, fpy.li/22].
897897
====
898898

899899
Vamos ao primeiro exemplo do tratamento de sequências com `match/case`.
@@ -1146,7 +1146,7 @@ O corpo da função é a expressão `(* n 2)`.
11461146
O resultado da chamada a uma função em Scheme é o valor da última expressão no corpo da função chamada.
11471147

11481148
Nosso foco aqui é a desestruturação de sequências, então não vou explicar as ações do avaliador.
1149-
Veja a <<pattern_matching_case_study_sec>> para aprender mais sobre o funcionamento do _lis.py_.
1149+
Veja a Seção 18.3 [vol.3, fpy.li/22] para aprender mais sobre o funcionamento do _lis.py_.
11501150

11511151
O <<ex_norvigs_eval>> mostra o avaliador de Norvig com algumas pequenas modificações,
11521152
abreviado para mostrar apenas os padrões de sequência.
@@ -1299,7 +1299,7 @@ tenha convencido você que `match/case` pode tornar seu código mais legível e
12991299

13001300
[NOTE]
13011301
====
1302-
Veremos mais do _lis.py_ na <<pattern_matching_case_study_sec>>,
1302+
Veremos mais do _lis.py_ na Seção 18.3 [vol.3, fpy.li/22],
13031303
quando vamos revisar o exemplo completo de `match/case` em `evaluate`.
13041304
Se você quiser aprender mais sobre o _lys.py_ de Norvig, leia seu maravilhoso post
13051305
https://fpy.li/2-12["(How to Write a (Lisp) Interpreter (in Python))" _(Como Escrever um Interpretador (Lisp) em (Python))_].
@@ -1320,9 +1320,9 @@ recurso comum a `list`, `tuple`, `str`, e a todos os tipos de sequência em Pyth
13201320
é o suporte a operações de fatiamento, que são mais potentes do que a maioria das pessoas percebe.
13211321

13221322
Nesta seção descrevemos o _uso_ dessas formas avançadas de fatiamento.
1323-
Sua implementação em uma classe definida pelo usuário será tratada no <<ch_seq_methods>>,
1323+
Sua implementação em uma classe definida pelo usuário será tratada no Capítulo 12 [vol.2, fpy.li/4t],
13241324
mantendo nossa filosofia de tratar de classes prontas para usar nessa parte do livro,
1325-
e da criação de novas classes na <<classes_protocols_part>>.
1325+
e da criação de novas classes na Parte III—Classes e protocolos [vol.2, fpy.li/4v].
13261326

13271327

13281328
==== Por que fatias e faixas excluem o último item?
@@ -1383,7 +1383,7 @@ Card(rank='A', suit='clubs'), Card(rank='A', suit='hearts')]
13831383
A notação `a:b:c` só é válida entre `[]` quando usada como operador de indexação ou de subscrição (_subscript_),
13841384
e produz um objeto fatia (_slice object_): `slice(a, b, c)`.
13851385
Para avaliar a expressão `seq[start:stop:step]`,
1386-
o Python chama `+seq.__getitem__(slice(start, stop, step))+`, como veremos na <<how_slicing_works_sec>>.
1386+
o Python chama `+seq.__getitem__(slice(start, stop, step))+`, como veremos na Seção 12.5.1 [vol.2, fpy.li/4w].
13871387
Mesmo se você não for implementar seus próprios tipos de sequência, saber dos objetos fatia é útil,
13881388
porque eles permitem que você atribua nomes às fatias, da mesma forma que planilhas permitem dar nomes a faixas de células.
13891389

@@ -1419,7 +1419,7 @@ Veja como isso torna legível o loop `for` no final do exemplo.
14191419
----
14201420
====
14211421

1422-
Voltaremos aos objetos +slice+ quando formos discutir a criação de suas próprias coleções, na <<sliceable_sequence_sec>>.
1422+
Voltaremos aos objetos +slice+ quando formos discutir a criação de suas próprias coleções, na Seção 12.5 [vol.2, fpy.li/4x].
14231423
Enquanto isso, do ponto de vista do usuário, o fatiamento tem recursos adicionais,
14241424
como fatias multidimensionais e a notação de reticências (`\...`).
14251425
Siga comigo.
@@ -1651,7 +1651,7 @@ que `+=` acontece _in-place_.
16511651
Para sequências imutáveis, obviamente isso não pode acontecer.
16521652

16531653
O que acabei de escrever sobre `+=` também se aplica a `\*=`, que é implementado via `++__imul__++`.
1654-
Os métodos especiais `++__iadd__++` e `++__imul__++` são tratados no <<ch_op_overload>>.
1654+
Os métodos especiais `++__iadd__++` e `++__imul__++` são tratados no Capítulo 16 [vol.2, fpy.li/4r].
16551655

16561656
Veja uma demonstração de `*=` com uma sequência mutável e depois com uma sequência imutável:
16571657

@@ -1822,7 +1822,7 @@ da Wikipedia em inglês para uma descrição mais detalhada deste tópico.
18221822
====
18231823

18241824
A função embutida `sorted`, por outro lado, cria e devolve uma nova lista.
1825-
Ela aceita qualquer objeto iterável como um argumento, incluindo sequências imutáveis e geradores (veja o <<ch_generators>>).
1825+
Ela aceita qualquer objeto iterável como um argumento, incluindo sequências imutáveis e geradores (veja o Capítulo 17 [vol.3, fpy.li/4s]).
18261826
Independente do tipo do iterável passado a `sorted`, ela sempre cria e devolve uma nova lista.
18271827

18281828
Tanto `list.sort` quanto `sorted` podem receber dois argumentos nomeados opcionais:
@@ -2035,7 +2035,7 @@ comparando as características de `list` e `array.array`.
20352035
| `+s.__len__()+` | ● | ● | `++len(s)++`—número de itens
20362036
| `+s.__mul__(n)+` | ● | ● | `++s * n++`—concatenação repetida
20372037
| `+s.__imul__(n)+` | ● | ● | `++s *= n++`—concatenação repetida no mesmo lugar
2038-
| `+s.__rmul__(n)+` | ● | ● | ++n * s++—concatenação repetida invertidafootnote:[Operadores invertidos são explicados no <<ch_op_overload>>.]
2038+
| `+s.__rmul__(n)+` | ● | ● | ++n * s++—concatenação repetida invertidafootnote:[Operadores invertidos são explicados no Capítulo 16 [vol.2, fpy.li/4r].]
20392039
| `s.pop([p])` | ● | ● | Remove e devolve o item na posição `p` (default: o último)
20402040
| `s.remove(e)` | ● | | Remove o primeiro elemento de valor igual a `e`
20412041
| `s.reverse()` | ● | ● | Reverte a ordem dos itens no mesmo lugar
@@ -2374,7 +2374,7 @@ então `deque` pode ser usado de forma segura como uma fila FIFO em aplicações
23742374
| `+s.__len__()+` | ● | ● | `++len(s)++`—número de itens
23752375
| `+s.__mul__(n)+` | ● | | `++s * n++`—concatenação repetida
23762376
| `+s.__imul__(n)+` | ● | | `++s *= n++`—concatenação repetida no mesmo lugar
2377-
| `+s.__rmul__(n)+` | ● | | `++n * s`++—concatenação repetida invertidafootnote:[Operadores invertidos são explicados no <<ch_op_overload>>.]
2377+
| `+s.__rmul__(n)+` | ● | | `++n * s`++—concatenação repetida invertidafootnote:[Operadores invertidos são explicados no Capítulo 16 [vol.2, fpy.li/4r].]
23782378
| `s.pop()` | ● | ● | Remove e devolve último itemfootnote:[`a_list.pop(p)` permite remover da posição `p`, mas `deque` não suporta essa opção.]
23792379
| `s.popleft()` | | ● | Remove e devolve primeiro item
23802380
| `s.remove(e)` | ● | | Remove o primeiro elemento de valor igual a `e`

0 commit comments

Comments
 (0)