Skip to content

Commit 2d0fa5b

Browse files
committed
cap07, 08: links curtos
1 parent 960e9a8 commit 2d0fa5b

File tree

4 files changed

+33
-19
lines changed

4 files changed

+33
-19
lines changed

capitulos/cap07.adoc

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ image::images/flpy_0701.png[Tela de ajuda da função factorial]
9999

100100
O <<func_object_demo2>> mostra a natureza de "primeira classe" de um objeto função.
101101
Podemos atribuir tal objeto a uma variável `fact` e invocá-lo por esse nome.
102-
Podemos também passar `factorial` como argumento para a função https://docs.python.org/pt-br/3/library/functions.html#map[`map`].
102+
Podemos também passar `factorial` como argumento para a função https://fpy.li/44[`map`].
103103
Invocar `map(function, iterable)` devolve um iterável no qual cada item é
104104
o resultado de uma chamada ao primeiro argumento (uma função)
105105
com elementos sucessivos do segundo argumento (um iterável), `range(11)` no exemplo.
@@ -123,7 +123,7 @@ com elementos sucessivos do segundo argumento (um iterável), `range(11)` no exe
123123
====
124124

125125
Ter funções de primeira classe permite programar em um estilo funcional.
126-
Um dos marcos da https://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_funcional[programação funcional]
126+
Um dos marcos da https://fpy.li/45[programação funcional]
127127
é o uso de funções de ordem superior, nosso próximo tópico.((("", startref="Otreat07")))((("", startref="FAFtreat07")))
128128

129129

@@ -311,7 +311,7 @@ Fredrik Lundh sugere o seguinte procedimento de refatoração:
311311
. Remova o comentário.
312312
313313
Esse passos são uma citação do
314-
https://docs.python.org/pt-br/3/howto/functional.html[_Programação Funcional—COMO FAZER_],
314+
https://fpy.li/46[_Programação Funcional—COMO FAZER_],
315315
leitura obrigatória.
316316
****
317317

@@ -326,7 +326,7 @@ Na próxima seção revisamos todos eles.
326326
O((("functions, as first-class objects", "callable objects", id="FAFcall07")))((("callable objects", "nine types of", id="calobj07")))((("objects", "callable objects", id="Ocall07"))) operador de invocação `()` pode ser aplicado a outros objetos além de funções.
327327
// beyond user-defined functions and ++lambdas++s.
328328
Para determinar se um objeto é invocável, use a função embutida `callable()`.
329-
No Python 3.9, a https://docs.python.org/pt-br/3/reference/datamodel.html#the-standard-type-hierarchy[documentação do modelo de dados] lista nove tipos invocáveis:
329+
No Python 3.9, a https://fpy.li/47[documentação do modelo de dados] lista nove tipos invocáveis:
330330

331331
[role="pagebreak-before less_space"]
332332
Funções definidas pelo usuário:: Criadas((("user-defined functions"))) com instruções `def` ou expressões `lambda`.
@@ -486,7 +486,7 @@ que só pode ser chamada com parâmetros posicionais, e não na forma `divmod(a=
486486

487487
Para definir uma função que requer parâmetros somente posicionais, use `/` na lista de parâmetros.
488488

489-
Esse exemplo, de https://docs.python.org/pt-br/3/whatsnew/3.8.html#positional-only-parameters["O que há de novo no Python 3.8"], mostra como emular a função embutida `divmod`:
489+
Esse exemplo, de https://fpy.li/48["O que há de novo no Python 3.8"], mostra como emular a função embutida `divmod`:
490490

491491
[source, python]
492492
----
@@ -511,7 +511,7 @@ def tag(name, /, *content, class_=None, **attrs):
511511
...
512512
----
513513

514-
Você pode encontrar outros exemplos de parâmetros somente posicionais no já citado https://docs.python.org/pt-br/3/whatsnew/3.8.html#positional-only-parameters["O que há de novo no Python 3.8"] e na https://fpy.li/pep570[PEP 570].
514+
Você pode encontrar outros exemplos de parâmetros somente posicionais no já citado https://fpy.li/48["O que há de novo no Python 3.8"] e na https://fpy.li/pep570[PEP 570].
515515

516516
Após esse mergulho nos recursos flexíveis de declaração de argumentos no Python, o resto desse capítulo trata dos pacotes da biblioteca padrão mais úteis para programar em um estilo funcional.((("", startref="FAFflex07")))((("", startref="pospar07")))((("", startref="Pposition07")))
517517

@@ -819,7 +819,7 @@ O <<ch_type_hints_def>> é dedicado às dicas de tipo nos parâmetros de funçã
819819
O <<ch_closure_decorator>> mergulha nos decoradores de função—um tipo especial de função de ordem superior—e no mecanismo de clausura (_closure_) que os faz funcionar.
820820
O <<ch_design_patterns>> mostra como as funções de primeira classe podem simplificar alguns padrões clássicos de projetos (_design patterns_) orientados a objetos.
821821

822-
Em _A Referência da Linguagem Python_, a seção https://docs.python.org/pt-br/3/reference/datamodel.html#the-standard-type-hierarchy["3.2. A hierarquia de tipos padrão"] mostra os noves tipos invocáveis, juntamente com todos os outros tipos embutidos.
822+
Em _A Referência da Linguagem Python_, a seção https://fpy.li/47["3.2. A hierarquia de tipos padrão"] mostra os noves tipos invocáveis, juntamente com todos os outros tipos embutidos.
823823

824824
O capítulo 7 do
825825
https://fpy.li/pycook3[_Python Cookbook_] (EN), 3ª ed. (O'Reilly), de David Beazley e Brian K. Jones,
@@ -828,7 +828,7 @@ tratando basicamente dos mesmos conceitos com uma abordagem diferente.
828828

829829
Veja a https://fpy.li/pep3102[PEP 3102--Keyword-Only Arguments (_Argumentos somente nomeados_)] (EN) se quiser saber a justificativa e casos de uso desse recurso.
830830

831-
Uma ótima introdução à programação funcional em Python é o https://docs.python.org/pt-br/3/howto/functional.html["Programação Funcional COMO FAZER"], de A. M. Kuchling.
831+
Uma ótima introdução à programação funcional em Python é o https://fpy.li/46["Programação Funcional COMO FAZER"], de A. M. Kuchling.
832832
O principal foco daquele texto, entretanto, é o uso de iteradores e geradoras, assunto do <<ch_generators>>.
833833

834834
A questão no StackOverflow, https://fpy.li/7-12["Python: Why is functools.partial necessary?" (_Python: Por que functools.partial é necessária?_)] (EN), tem uma resposta muito informativa (e engraçada) escrita por Alex Martelli, co-autor do clássico _Python in a Nutshell_ (O'Reilly).

capitulos/cap08.adoc

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -816,7 +816,7 @@ A chamada `f1(o2)` é uma aplicação do Princípio de Substituição de Liskov
816816
(_Liskov Substitution Principle_, LSP).
817817

818818
Barbara Liskovfootnote:[Professora do MIT, designer de linguagens de programação e homenageada com o Turing Award em 2008.
819-
Wikipedia: https://pt.wikipedia.org/wiki/Barbara_Liskov[Barbara Liskov].]
819+
Wikipedia: https://fpy.li/49[Barbara Liskov].]
820820
definiu _é subtipo-de_ em termos das operações suportadas.
821821
Se um objeto do tipo `T2` substitui um objeto do tipo `T1` e
822822
o programa continua se comportando de forma correta, então `T2` é _subtipo-de_ `T1`.
@@ -1109,7 +1109,7 @@ def tokenize(text: str) -> List[str]:
11091109
Para fornecer um suporte inicial a dicas de tipo genéricas,
11101110
os autores da PEP 484 criaram dúzias de tipos genéricos no módulo `typing`.
11111111
A <<generic_collections_tbl>> mostra alguns deles.
1112-
Para a lista completa, consulte a documentação do módulo https://docs.python.org/pt-br/3/library/typing.html[_typing_] .
1112+
Para a lista completa, consulte a documentação do módulo https://fpy.li/4a[_typing_] .
11131113
11141114
[[generic_collections_tbl]]
11151115
.Alguns tipos de coleção e seus equivalentes nas dicas de tipo
@@ -1134,7 +1134,7 @@ Podemos resumir esse processo em quatro etapas:
11341134
11351135
. Tornar aquele comportamento o default a partir de Python 3.9: `list[str]` agora funciona sem que `future` precise ser importado.
11361136
1137-
. Descontinuar (_deprecate_) todos os tipos genéricos do módulo `typing`.footnote:[Uma de minhas contribuições para a documentação do módulo `typing` foi acrescentar dúzias de avisos de descontinuação, enquanto eu reorganizava as entradas abaixo de https://docs.python.org/pt-br/3/library/typing.html#module-contents["Conteúdo do Módulo"] em subseções, sob a supervisão de Guido van [.keep-together]#Rossum#.] Avisos de descontinuação não serão emitidos pelo interpretador Python, porque os checadores de tipos devem sinalizar os tipos descontinuados quando o programa sendo verificado tiver como alvo Python 3.9 ou posterior.
1137+
. Descontinuar (_deprecate_) todos os tipos genéricos do módulo `typing`.footnote:[Uma de minhas contribuições para a documentação do módulo `typing` foi acrescentar dúzias de avisos de descontinuação, enquanto eu reorganizava as entradas abaixo de https://fpy.li/4b["Conteúdo do Módulo"] em subseções, sob a supervisão de Guido van [.keep-together]#Rossum#.] Avisos de descontinuação não serão emitidos pelo interpretador Python, porque os checadores de tipos devem sinalizar os tipos descontinuados quando o programa sendo verificado tiver como alvo Python 3.9 ou posterior.
11381138
11391139
. Remover aqueles tipos genéricos redundantes na primeira versão de Python lançada cinco anos após Python 3.9. No ritmo atual, esse deverá ser Python 3.14, também conhecido como Python Pi.
11401140
****
@@ -1385,7 +1385,7 @@ def tokenize(text: str) -> list[str]:
13851385
return text.upper().split()
13861386
----
13871387

1388-
No verbete de https://docs.python.org/pt-br/3/library/typing.html#typing.List[`typing.List`], a documentação do Python 3.10 diz
1388+
No verbete de https://fpy.li/4c[`typing.List`], a documentação do Python 3.10 diz
13891389
(NT: tradução abaixo não oficial)
13901390

13911391
[quote]
@@ -1408,7 +1408,7 @@ Para encerrar nossa discussão de ABCs em dicas de tipo, precisamos falar sobre
14081408
[[numeric_tower_warning]]
14091409
===== A queda da torre numérica
14101410

1411-
O((("numbers package")))((("numeric tower"))) pacote https://docs.python.org/pt-br/3/library/numbers.html[`numbers`] define a assim chamada _torre numérica_ (_numeric tower_) descrita na https://fpy.li/pep3141[PEP 3141—A Type Hierarchy for Numbers] (EN).
1411+
O((("numbers package")))((("numeric tower"))) pacote https://fpy.li/4d[`numbers`] define a assim chamada _torre numérica_ (_numeric tower_) descrita na https://fpy.li/pep3141[PEP 3141—A Type Hierarchy for Numbers] (EN).
14121412
A torre é uma hierarquia linear de ABCs, com `Number` no topo:
14131413

14141414
* `Number`
@@ -1438,7 +1438,7 @@ Antes disso, vamos examinar uma ABC muito útil em dicas de tipo: `Iterable`.(((
14381438

14391439
A((("gradual type system", "Iterable", id="GTSiterable08")))((("Iterable interface",
14401440
id="iterable08")))((("interfaces", "Iterable interface")))
1441-
documentação de https://docs.python.org/pt-br/3/library/typing.html#typing.List[`typing.List`]
1441+
documentação de https://fpy.li/4c[`typing.List`]
14421442
que citei acima recomenda `Sequence` e `Iterable` para dicas de tipo de parâmetros de função.
14431443

14441444
Esse é um exemplo de argumento `Iterable`, na função `math.fsum` da biblioteca padrão:
@@ -1585,7 +1585,7 @@ depending on some random factor I don't know how to control.
15851585

15861586
Outro exemplo é a função `statistics.mode` da biblioteca padrão, que retorna o ponto de dado mais comum de uma série.
15871587

1588-
Aqui é uma exemplo de uso da https://docs.python.org/pt-br/3/library/statistics.html#statistics.mode[documentação]:
1588+
Aqui é uma exemplo de uso da https://fpy.li/4e[documentação]:
15891589

15901590
[source, pycon]
15911591
----
@@ -2010,7 +2010,7 @@ Callable[[Any], str]
20102010
----
20112011
Não existe sintaxe para a declarar o tipo de argumentos opcionais ou nomeados.
20122012
A
2013-
https://docs.python.org/pt-br/3/library/typing.html#typing.Callable[documentação]
2013+
https://fpy.li/4f[documentação]
20142014
de `typing.Callable` diz "tais funções são raramente usadas como tipo de callback."
20152015
Se você precisar de um dica de tipo para acompanhar uma função com assinatura mais flexível,
20162016
substitua a lista de parâmetros por `\...` - assim:
@@ -2303,7 +2303,7 @@ https://fpy.li/8-45[página de referência (ou _cheat sheet)] (EN)
23032303
e uma página muito útil sobre
23042304
https://fpy.li/8-46[problemas comuns e suas soluções] (EN).
23052305

2306-
A documentação do módulo https://docs.python.org/pt-br/3/library/typing.html[`typing`] é uma boa referência rápida, mas não entra em muitos detalhes.
2306+
A documentação do módulo https://fpy.li/4a[`typing`] é uma boa referência rápida, mas não entra em muitos detalhes.
23072307

23082308
A https://fpy.li/pep483[PEP 483—The Theory of Type Hints] (EN) inclui uma explicação aprofundada sobre variância, usando `Callable` para ilustrar a contravariância.
23092309
As referências definitivas são as PEP relacionadas a tipagem.

capitulos/cap12.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ include::code/12-seq-hacking/vector_v1.py[tags=VECTOR_V1]
9191
<6> Desde Python 3.8, `math.hypot` aceita pontos N-dimensionais. Já usei a seguinte expressão antes: `math.sqrt(sum(x * x for x in self))`.
9292
<7> A única mudança necessária no `frombytes` anterior é na última linha: passamos a `memoryview` diretamente para o construtor, sem desempacotá-la com `*`, como fazíamos antes.
9393

94-
O modo como usei `reprlib.repr` pede alguma elaboração. Essa função produz representações seguras de estruturas grandes ou recursivas, limitando a tamanho da string devolvida e marcando o corte com `'...'`. Eu queria que o `repr` de um `Vector` se parecesse com `Vector([3.0, 4.0, 5.0])` e não com `Vector(array('d', [3.0, 4.0, 5.0]))`, porque a existência de um `array` dentro de um `Vector` é um detalhe de implementação. Como essas chamadas ao construtor criam objetos `Vector` idênticos, preferi a sintaxe mais simples, usando um argumento `list`.
94+
O modo como usei `reprlib.repr` pede alguma elaboração. Essa função produz representações seguras de estruturas grandes ou recursivas, limitando a tamanho da string devolvida e marcando o corte com `'\...'`. Eu queria que o `repr` de um `Vector` se parecesse com `Vector([3.0, 4.0, 5.0])` e não com `Vector(array('d', [3.0, 4.0, 5.0]))`, porque a existência de um `array` dentro de um `Vector` é um detalhe de implementação. Como essas chamadas ao construtor criam objetos `Vector` idênticos, preferi a sintaxe mais simples, usando um argumento `list`.
9595

9696
Ao escrever o `+__repr__+`, poderia ter produzido uma versão para exibição simplificada de `components` com essa expressão: `reprlib.repr(list(self._components))`. Isso, entretanto, geraria algum desperdício, pois eu estaria copiando cada item de `self._components` para uma `list` apenas para usar a `list` no `repr`. Em vez disso, decidi aplicar `reprlib.repr` diretamente no array `self._components`, e então remover os caracteres fora dos `[]`. É isso o que faz a segunda linha do
9797
`+__repr__+` no <<ex_vector_v1>>.
@@ -882,7 +882,7 @@ E daí Alex Martelli voltou para sugerir:
882882
883883
[quote]
884884
____
885-
A soma é necessária com tanta frequência que eu não me importaria de forma alguma se Python a tornasse uma função embutida. Mas "reduce(operator.add, ..." não é mesmo uma boa maneira de expressar isso, na minha opinião (e vejam que, como um antigo APListafootnote:[NT: Aqui Martelli está se referindo à linguagem https://pt.wikipedia.org/wiki/APL_(linguagem_de_programa%C3%A7%C3%A3o[APL]] e um apreciador da FPfootnote:[NT:E aqui à linguagem https://pt.wikipedia.org/wiki/FP_(linguagem_de_programa%C3%A7%C3%A3o[FP]], eu _deveria_ gostar daquilo, mas não gosto.).
885+
A soma é necessária com tanta frequência que eu não me importaria de forma alguma se Python a tornasse uma função embutida. Mas `reduce(operator.add, \...)` não é mesmo uma boa maneira de expressar isso, na minha opinião (e vejam que, como um antigo APListafootnote:[NT: Aqui Martelli está se referindo à linguagem https://pt.wikipedia.org/wiki/APL_(linguagem_de_programa%C3%A7%C3%A3o[APL]] e um apreciador da FPfootnote:[NT:E aqui à linguagem https://pt.wikipedia.org/wiki/FP_(linguagem_de_programa%C3%A7%C3%A3o[FP]], eu _deveria_ gostar daquilo, mas não gosto).
886886
____
887887
888888
Martelli então sugere uma função `sum()`, que ele mesmo programa e propõe para Python. Ela se torna uma função embutida no Python 2.3, lançado apenas três meses após aquela conversa na lista. E a sintaxe preferida de Alex se torna a regra:

links/FPY.LI.htaccess

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1148,4 +1148,18 @@ RedirectTemp /3x https://docs.python.org/pt-br/3/reference/datamodel.html#object
11481148
RedirectTemp /3y https://docs.python.org/pt-br/3/library/gc.html
11491149
RedirectTemp /43 https://docs.python.org/pt-br/3/library/copy.html
11501150

1151+
# cap07: appended 2025-08-13 20:10:26
1152+
RedirectTemp /44 https://docs.python.org/pt-br/3/library/functions.html#map
1153+
RedirectTemp /45 https://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_funcional
1154+
RedirectTemp /46 https://docs.python.org/pt-br/3/howto/functional.html
1155+
RedirectTemp /47 https://docs.python.org/pt-br/3/reference/datamodel.html#the-standard-type-hierarchy
1156+
RedirectTemp /48 https://docs.python.org/pt-br/3/whatsnew/3.8.html#positional-only-parameters
11511157

1158+
# cap08: appended 2025-08-13 20:11:07
1159+
RedirectTemp /49 https://pt.wikipedia.org/wiki/Barbara_Liskov
1160+
RedirectTemp /4a https://docs.python.org/pt-br/3/library/typing.html
1161+
RedirectTemp /4b https://docs.python.org/pt-br/3/library/typing.html#module-contents
1162+
RedirectTemp /4c https://docs.python.org/pt-br/3/library/typing.html#typing.List
1163+
RedirectTemp /4d https://docs.python.org/pt-br/3/library/numbers.html
1164+
RedirectTemp /4e https://docs.python.org/pt-br/3/library/statistics.html#statistics.mode
1165+
RedirectTemp /4f https://docs.python.org/pt-br/3/library/typing.html#typing.Callable

0 commit comments

Comments
 (0)