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
@@ -326,7 +326,7 @@ Na próxima seção revisamos todos eles.
326
326
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.
327
327
// beyond user-defined functions and ++lambdas++s.
328
328
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:
330
330
331
331
[role="pagebreak-before less_space"]
332
332
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=
486
486
487
487
Para definir uma função que requer parâmetros somente posicionais, use `/` na lista de parâmetros.
488
488
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`:
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].
515
515
516
516
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")))
517
517
@@ -819,7 +819,7 @@ O <<ch_type_hints_def>> é dedicado às dicas de tipo nos parâmetros de funçã
819
819
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.
820
820
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.
821
821
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.
823
823
824
824
O capítulo 7 do
825
825
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.
828
828
829
829
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.
830
830
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.
832
832
O principal foco daquele texto, entretanto, é o uso de iteradores e geradoras, assunto do <<ch_generators>>.
833
833
834
834
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).
Para fornecer um suporte inicial a dicas de tipo genéricas,
1110
1110
os autores da PEP 484 criaram dúzias de tipos genéricos no módulo `typing`.
1111
1111
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_] .
1113
1113
1114
1114
[[generic_collections_tbl]]
1115
1115
.Alguns tipos de coleção e seus equivalentes nas dicas de tipo
@@ -1134,7 +1134,7 @@ Podemos resumir esse processo em quatro etapas:
1134
1134
1135
1135
. Tornar aquele comportamento o default a partir de Python 3.9: `list[str]` agora funciona sem que `future` precise ser importado.
1136
1136
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.
1138
1138
1139
1139
. 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.
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
1389
1389
(NT: tradução abaixo não oficial)
1390
1390
1391
1391
[quote]
@@ -1408,7 +1408,7 @@ Para encerrar nossa discussão de ABCs em dicas de tipo, precisamos falar sobre
1408
1408
[[numeric_tower_warning]]
1409
1409
===== A queda da torre numérica
1410
1410
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).
1412
1412
A torre é uma hierarquia linear de ABCs, com `Number` no topo:
1413
1413
1414
1414
* `Number`
@@ -1438,7 +1438,7 @@ Antes disso, vamos examinar uma ABC muito útil em dicas de tipo: `Iterable`.(((
1438
1438
1439
1439
A((("gradual type system", "Iterable", id="GTSiterable08")))((("Iterable interface",
https://fpy.li/8-46[problemas comuns e suas soluções] (EN).
2305
2305
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.
2307
2307
2308
2308
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.
2309
2309
As referências definitivas são as PEP relacionadas a tipagem.
<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))`.
92
92
<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.
93
93
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`.
95
95
96
96
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
97
97
`+__repr__+` no <<ex_vector_v1>>.
@@ -882,7 +882,7 @@ E daí Alex Martelli voltou para sugerir:
882
882
883
883
[quote]
884
884
____
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).
886
886
____
887
887
888
888
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:
0 commit comments