Skip to content

Commit 5acf0bd

Browse files
committed
uniformizar xrefs para exemplos
1 parent dd81892 commit 5acf0bd

24 files changed

+226
-160
lines changed

links/FPY.LI.htaccess

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1326,3 +1326,37 @@ RedirectTemp /7q https://docs.python.org/pt-br/3/library/functools.html#functool
13261326

13271327
# cap16: appended 2025-12-02 14:22:00
13281328
RedirectTemp /7r https://docs.python.org/pt-br/3/library/numbers.html#implementing-the-arithmetic-operations
1329+
1330+
# vol2, xrefs to secs in other vols, appended 2025-12-08 12:03:33
1331+
RedirectTemp /7s https://pythonfluente.com/2/#anatomy_of_classes_sec
1332+
RedirectTemp /7t https://pythonfluente.com/2/#arbitrary_arguments_sec
1333+
RedirectTemp /7v https://pythonfluente.com/2/#arrays_sec
1334+
RedirectTemp /7w https://pythonfluente.com/2/#bounded_typevar_sec
1335+
RedirectTemp /7x https://pythonfluente.com/2/#caching_properties_sec
1336+
RedirectTemp /7y https://pythonfluente.com/2/#callable_variance_sec
1337+
RedirectTemp /7z https://pythonfluente.com/2/#classic_coroutines_sec
1338+
RedirectTemp /82 https://pythonfluente.com/2/#conseq_dict_internal_sec
1339+
RedirectTemp /83 https://pythonfluente.com/2/#consistent_with_sec
1340+
RedirectTemp /84 https://pythonfluente.com/2/#data_model_emulating_sec
1341+
RedirectTemp /85 https://pythonfluente.com/2/#dataclass_further_sec
1342+
RedirectTemp /86 https://pythonfluente.com/2/#del_sec
1343+
RedirectTemp /87 https://pythonfluente.com/2/#generic_classic_coroutine_types_sec
1344+
RedirectTemp /88 https://pythonfluente.com/2/#inconsistent_missing_sec
1345+
RedirectTemp /89 https://pythonfluente.com/2/#iter_func_sec
1346+
RedirectTemp /8a https://pythonfluente.com/2/#keyword_class_patterns_sec
1347+
RedirectTemp /8b https://pythonfluente.com/2/#map_filter_reduce_sec
1348+
RedirectTemp /8c https://pythonfluente.com/2/#mapping_type_sec
1349+
RedirectTemp /8d https://pythonfluente.com/2/#memoryview_sec
1350+
RedirectTemp /8e https://pythonfluente.com/2/#methods_are_descriptors_sec
1351+
RedirectTemp /8f https://pythonfluente.com/2/#noreturn_sec
1352+
RedirectTemp /8g https://pythonfluente.com/2/#numeric_tower_warning_sec
1353+
RedirectTemp /8h https://pythonfluente.com/2/#numpy_sec
1354+
RedirectTemp /8j https://pythonfluente.com/2/#operator_module_sec
1355+
RedirectTemp /8k https://pythonfluente.com/2/#prop_validation_sec
1356+
RedirectTemp /8m https://pythonfluente.com/2/#protocols_in_fn_sec
1357+
RedirectTemp /8n https://pythonfluente.com/2/#set_ops_sec
1358+
RedirectTemp /8p https://pythonfluente.com/2/#slice_objects_sec
1359+
RedirectTemp /8q https://pythonfluente.com/2/#stdlib_generators_sec
1360+
RedirectTemp /8r https://pythonfluente.com/2/#type_hint_abc_sec
1361+
RedirectTemp /8s https://pythonfluente.com/2/#types_defined_by_ops_sec
1362+
RedirectTemp /8t https://pythonfluente.com/2/#what_is_hashable_sec

online/cap02.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1353,7 +1353,7 @@ Por exemplo:
13531353
Agora vamos olhar mais de perto a forma como Python interpreta a notação de fatiamento.
13541354

13551355

1356-
[[slice_objects]]
1356+
[[slice_objects_sec]]
13571357
==== Objetos fatia
13581358

13591359
Isso((("slicing", "slice objects"))) não é segredo, mas vale a pena repetir, só para ter certeza:

online/cap03.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1376,7 +1376,7 @@ no _http://fluentpython.com_ para mais detalhes.
13761376

13771377
Agora vamos revisar a vasta seleção de operações oferecidas pelos conjuntos.
13781378

1379-
[[set_op_section]]
1379+
[[set_ops_sec]]
13801380
==== Operações de conjuntos
13811381

13821382
A <<set_uml>> dá((("dictionaries and sets", "set operations", id="DASset03-ops")))((("sets",

online/cap05.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1594,7 +1594,7 @@ Isso inclusive funciona se a variável do padrão também se chamar `country`:
15941594
----
15951595

15961596
Padrões de classe nomeados são bastante legíveis,
1597-
e funcionam com qualquer classe que possua atributos de instância públicos.
1597+
e funcionam com qualquer classe que tenha atributos de instância públicos.
15981598
Mas eles são um tanto prolixos.
15991599

16001600
Padrões de classe posicionais são mais convenientes em alguns casos,

online/cap08.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1865,12 +1865,12 @@ include::../code/08-def-type-hints/comparable/top.py[tags=TOP]
18651865
----
18661866
====
18671867

1868-
Vamos testar `top`. O <<top_protocol_test>> mostra parte de uma bateria de testes para uso com o `pytest`.
1868+
Vamos testar `top`. O <<ex_top_protocol_test>> mostra parte de uma bateria de testes para uso com o `pytest`.
18691869
Ele tenta chamar `top` primeiro com um gerador de expressões que produz `tuple[int, str]`, e depois com uma lista de `object`.
18701870
Com a lista de `object`, esperamos receber uma exceção de `TypeError`.
18711871

18721872

1873-
[[top_protocol_test]]
1873+
[[ex_top_protocol_test]]
18741874
._top_test.py_: visão parcial da bateria de testes para `top`
18751875
====
18761876
[source, python]

online/cap12.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ Vamos agora olhar mais de perto a própria classe `slice`, no <<ex_slice1>>.
373373
'indices', 'start', 'step', 'stop']
374374
----
375375
====
376-
<1> `slice` é um tipo embutido (que já vimos antes na <<slice_objects>>).
376+
<1> `slice` é um tipo embutido (que já vimos antes na <<slice_objects_sec>>).
377377
<2> Inspecionando uma `slice` descobrimos os atributos de dados
378378
`start`, `stop`, e `step`, e um método `indices`.
379379

online/cap13.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,7 +1004,7 @@ No Python 3, os objetos devolvidos pelos métodos de mapeamentos `.items()`,
10041004
`.keys()`, e `.values()` implementam as interfaces definidas em `ItemsView`,
10051005
`KeysView`, e `ValuesView`, respectivamente. Os dois primeiros também
10061006
implementam a rica interface de `Set`, com todos os operadores que vimos na
1007-
<<set_op_section>>.
1007+
<<set_ops_sec>>.
10081008

10091009
`Iterator`::
10101010
Observe que iterator é subclasse de `Iterable`.
@@ -2179,7 +2179,7 @@ de execução sobre o item obtido.
21792179

21802180
<8> Esta linha gera uma observação no relatório do Mypy.
21812181

2182-
Como vimos no <<top_protocol_test>>, `reveal_type` é uma função "mágica"
2182+
Como vimos no <<ex_top_protocol_test>>, `reveal_type` é uma função "mágica"
21832183
reconhecida pelo Mypy. Por isso ela não é importada e só conseguimos chamá-la
21842184
de dentro de blocos `if` protegidos por `typing.TYPE_CHECKING`, que só é `True`
21852185
aos olhos de um checador de tipos estático, mas é `False` durante a

online/cap15.adoc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -840,7 +840,7 @@ implementação mais simples, produzindo strings diretamente, sem passar pelo
840840
seria necessário.]
841841

842842
Aqui está outro exemplo com `cast`, desta vez para corrigir uma dica de tipo
843-
desatualizada na biblioteca padrão de Python. No <<tcp_mojifinder_main_ex>>, criei
843+
desatualizada na biblioteca padrão de Python. No <<ex_tcp_mojifinder_main>>, criei
844844
um objeto `asyncio.Server`, e queria obter o endereço onde o servidor está
845845
ouvindo (aceitando conexões). Escrevi esta linha de código:
846846

@@ -892,7 +892,7 @@ seguro.
892892
A leitora atenta pode ter notado que `sockets[0]` poderia gerar um `IndexError`
893893
se `sockets` estiver vazio.
894894
Entretanto, até onde entendo o `asyncio`, isso não pode acontecer no
895-
<<tcp_mojifinder_main_ex>>, pois no momento em que leio o atributo `sockets`, o
895+
<<ex_tcp_mojifinder_main>>, pois no momento em que leio o atributo `sockets`, o
896896
`server` já está pronto para aceitar conexões , portanto o atributo não estará
897897
vazio. E, de qualquer forma, `IndexError` ocorre durante a execução. O Mypy não
898898
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
11611161
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.
11621162

11631163
Para demonstrar esse segundo ponto, aqui estão as primeiras linhas da classe `Checked`, definida no
1164-
<<checked_class_top_ex>>, classe que estudaremos no <<ch_class_metaprog>>:
1164+
<<ex_checked_class_top>>, classe que estudaremos no <<ch_class_metaprog>>:
11651165

11661166
[source, python]
11671167
----
@@ -1900,7 +1900,7 @@ https://fpy.li/15-52[docstring] no código-fonte.
19001900
19011901
19021902
Caí em uma toca de coelho similar quando acrescentei dicas de tipo ao
1903-
<<primes_procs_top_ex>>, uma demonstração simples de `multiprocessing`.
1903+
<<ex_primes_procs_top>>, uma demonstração simples de `multiprocessing`.
19041904
Aquele exemplo usa objetos `SimpleQueue`,
19051905
obtidos invocando `multiprocessing.SimpleQueue()`.
19061906
Entretanto, não pude usar aquele nome em uma dica de tipo,

online/cap19.adoc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -804,16 +804,16 @@ Quando((("process pools", "code for multicore prime checker", id="PPmulticore19"
804804
Em vez disso, a função de trabalho é guiada pela biblioteca de threads ou processos, e por fim produz um resultado que precisa ser armazenado em algum lugar.
805805
Coordenar threads ou processos de trabalho e coletar resultados são usos comuns de filas em programação concorrente—e também em sistemas distribuídos.
806806

807-
Muito do código novo em _procs.py_ se refere a configurar e usar filas. O início do arquivo está no <<primes_procs_top_ex>>.
807+
Muito do código novo em _procs.py_ se refere a configurar e usar filas. O início do arquivo está no <<ex_primes_procs_top>>.
808808

809809
[WARNING]
810810
====
811811
`SimpleQueue` foi acrescentada a `multiprocessing` no Python 3.9.
812812
Se você estiver usando uma versão anterior de Python,
813-
pode substituir `SimpleQueue` por `Queue` no <<primes_procs_top_ex>>.
813+
pode substituir `SimpleQueue` por `Queue` no <<ex_primes_procs_top>>.
814814
====
815815

816-
[[primes_procs_top_ex]]
816+
[[ex_primes_procs_top]]
817817
.procs.py: checagem de primos com múltiplos processos; importações, tipos, e funções
818818
====
819819
[source, python]
@@ -842,7 +842,7 @@ Temos que chamar essa `SimpleQueue` para criar uma fila. Por outro lado, não po
842842
.Loops, sentinelas e pílulas venenosas
843843
****
844844
A((("concurrency models", "indefinite loops and sentinels")))((("indefinite loops")))((("sentinels")))
845-
função `worker` no <<primes_procs_top_ex>> segue um modelo comum em programação concorrente:
845+
função `worker` no <<ex_primes_procs_top>> segue um modelo comum em programação concorrente:
846846
percorrer indefinidamente um loop, pegando itens em um fila e processando cada um deles com uma função que realiza o trabalho real.
847847
O loop termina quando a fila produz um valor sentinela.
848848
Nesse modelo, a sentinela que encerra o processo é muitas vezes chamada de "pílula venenosa.
@@ -873,7 +873,7 @@ include::../code/19-concurrency/primes/procs.py[tags=PRIMES_PROC_MAIN]
873873
----
874874
====
875875
<1> Se nenhum argumento é dado na linha de comando, define o número de processos como o número de núcleos na CPU; caso contrário, cria quantos processos forem passados no primeiro argumento.
876-
<2> `jobs` e `results` são as filas descritas no <<primes_procs_top_ex>>.
876+
<2> `jobs` e `results` são as filas descritas no <<ex_primes_procs_top>>.
877877
<3> Inicia `proc` processos para consumir `jobs` e informar `results`.
878878
<4> Recupera e exibe os resultados; `report` está definido em pass:[<img src="callouts/6.png" alt="6"/>].
879879
<5> Mostra quantos números foram checados e o tempo total decorrido.
@@ -1190,7 +1190,7 @@ Consumidores não precisam saber nada sobre os produtores (mas a requisição po
11901190
Pode-se adicionar mais unidades de execução para consumir tarefas a medida que a demanda cresce.
11911191
Por isso o _Celery_ e o _RQ_ são chamados de filas de tarefas distribuídas.
11921192

1193-
Lembre-se que nosso simples _procs.py_ (<<primes_procs_top_ex>>) usava duas filas:
1193+
Lembre-se que nosso simples _procs.py_ (<<ex_primes_procs_top>>) usava duas filas:
11941194
uma para requisições de tarefas, outra para coletar resultados.
11951195
A arquitetura distribuída do _Celery_ e do _RQ_ usa um esquema similar.
11961196
Ambos suportam o uso do banco de dados NoSQL https://fpy.li/19-50[_Redis_] para armazenar as filas de mensagens e resultados.

online/cap21.adoc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -904,10 +904,10 @@ O((("TCP servers", id="tcp21")))((("servers", "TCP servers", id="Stcp22"))) prog
904904
image::../images/flpy_2105.png[Captura de tela de conexão via telnet com tcp_mojifinder.py]
905905

906906
Este programa é duas vezes mais longo que o _web_mojifinder.py_, então dividi sua apresentação em três partes:
907-
<<tcp_mojifinder_main_ex>>, <<tcp_mojifinder_top>>, e <<tcp_mojifinder_search>>.
907+
<<ex_tcp_mojifinder_main>>, <<tcp_mojifinder_top>>, e <<tcp_mojifinder_search>>.
908908
O início de _tcp_mojifinder.py_—incluindo os comandos `import`—está no <<tcp_mojifinder_top>>,mas vou começar descrevendo a corrotina `supervisor` e a função `main` que controla o programa.
909909

910-
[[tcp_mojifinder_main_ex]]
910+
[[ex_tcp_mojifinder_main]]
911911
.tcp_mojifinder.py: um servidor TCP simples; continua em <<tcp_mojifinder_top>>
912912
====
913913
[source, python]
@@ -964,7 +964,7 @@ Enquanto o loop de eventos estiver ativo, uma nova instância da corrotina `find
964964
Agora vamos ver o início de _tcp_mojifinder.py_, com a corrotina `finder`.
965965

966966
[[tcp_mojifinder_top]]
967-
.tcp_mojifinder.py: continuação de <<tcp_mojifinder_main_ex>>
967+
.tcp_mojifinder.py: continuação de <<ex_tcp_mojifinder_main>>
968968
====
969969
[source, python]
970970
----

0 commit comments

Comments
 (0)