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
Copy file name to clipboardExpand all lines: capitulos/cap03.adoc
+9-9Lines changed: 9 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -498,7 +498,7 @@ O <<ex_strkeydict0>> implementa a classe `StrKeyDict0`, que passa nos doctests a
498
498
499
499
[TIP]
500
500
====
501
-
Uma forma melhor de criar uma mapeamento definido pelo usuário é criar uma subclasse de `collections.UserDict` em vez de `dict` (como faremos no <<ex_strkeydict>>). Aqui criamos uma sibclasse de `dict` apenas para mostrar que `+__missing__+` é suportado pelo método embutido `+dict.__getitem__+`.
501
+
Uma forma melhor de criar uma mapeamento definido pelo usuário é criar uma subclasse de `collections.UserDict` em vez de `dict` (como faremos no <<ex_strkeydict>>). Aqui criamos uma subclasse de `dict` apenas para mostrar que `+__missing__+` é suportado pelo método embutido `+dict.__getitem__+`.
502
502
====
503
503
504
504
[[ex_strkeydict0]]
@@ -571,7 +571,7 @@ Veja
571
571
https://fpy.li/3-7[_missing.py_]
572
572
no repositório de exemplos de código para demonstrações dos cenários descritos acima.
573
573
574
-
Os quatro cenários que acabo de descrever supõe implementações mínimas.
574
+
Os quatro cenários que acabo de descrever supõem implementações mínimas.
575
575
Se a sua subclasse implementa `+__getitem__+`, `get`, e `+__contains__+`,
576
576
então você pode ou não fazer tais métodos usarem `+__missing__+`, dependendo de suas necessidades.
577
577
O ponto aqui é mostrar que é preciso ter cuidado ao criar subclasses dos mapeamentos da biblioteca padrão para usar `+__missing__+`, porque as classes base suportam comportamentos default diferentes.
Isso pode ser usado assim na prática, no cenário da programação de hardware:
791
-
o construtor em uma subcalsse concreta `Board` preencheria um mapeamento privado com os objetos porta, e o exporia aos clientes da API via um atributo público `.portas`, implementado como um `mappingproxy`.
791
+
o construtor em uma subclasse concreta `Board` preencheria um mapeamento privado com os objetos porta, e o exporia aos clientes da API via um atributo público `.portas`, implementado como um `mappingproxy`.
792
792
Dessa forma os clientes não poderiam acrescentar, remover ou modificar as portas por acidente.
793
793
794
794
A seguir veremos _views_—que permitem operações de alto desempenho em um `dict`, sem cópias desnecessárias dos dados.
@@ -969,7 +969,7 @@ Além do teste de existência extremamente rápido (graças à tabela de hash su
969
969
970
970
==== Sets literais
971
971
972
-
A((("sets", "set literals"))) sintaxe de literais `set`—`{1}`, `{1, 2}`, etc.—parece exatamente igual à notação matemática, mas tem uma importante exceção: não notação literal para o `set` vazio, então precisamos nos lembrar de escrever `set()`.
972
+
A((("sets", "set literals"))) sintaxe de literais `set`—`{1}`, `{1, 2}`, etc.—parece exatamente igual à notação matemática, mas tem uma importante exceção: não há notação literal para o `set` vazio, então precisamos nos lembrar de escrever `set()`.
973
973
974
974
.Peculiaridade sintática
975
975
[WARNING]
@@ -1086,7 +1086,7 @@ image::images/flpy_0302.png[Diagrama de classe UML para `Set` e `MutableSet`]
1086
1086
| | `s \|= z`| `+s.__ior__(z)+` | `s` atualizado com a união de `s` e `z`
1087
1087
| | | `s.update(it, …)` | `s` atualizado com a união de `s` e todos os conjuntos construídos a partir de iteráveis `it`, etc.
1088
1088
||||
1089
-
| S \ Z | `s - z` | `+s.__sub__(z)+` | Complemeto relativo ou diferença entre `s` e `z`
1089
+
| S \ Z | `s - z` | `+s.__sub__(z)+` | Complemento relativo ou diferença entre `s` e `z`
| | | `s.difference(it, …)` | Diferença entre `s` e todos os conjuntos construídos a partir de iteráveis `it`, etc.
1092
1092
| | `s -= z` | `+s.__isub__(z)+` | `s` atualizado com a diferença entre `s` e `z`
@@ -1209,7 +1209,7 @@ Por outro lado, uma view devolvida por `dict_keys` sempre pode ser usada como um
1209
1209
====
1210
1210
1211
1211
Usar operações de conjunto com views pode evitar a necessidade de muitos loops e ifs quando seu código precisa inspecionar o conteúdo de dicionários.
1212
-
Deixe a eficiente implemtação do Python em C trabalhar para você!
1212
+
Deixe a eficiente implementação do Python em C trabalhar para você!
1213
1213
1214
1214
Com isso, encerramos esse capítulo.
1215
1215
@@ -1220,7 +1220,7 @@ Com isso, encerramos esse capítulo.
1220
1220
Dicionários((("dictionaries and sets", "overview of"))) são a pedra fundamental do Python.
1221
1221
Ao longo dos anos, a sintaxe literal familiar, `{k1: v1, k2: v2}`, foi aperfeiçoada para suportar desempacotamento com `**` e pattern matching, bem como com compreensões de `dict`.
1222
1222
1223
-
Além do `dict` básico, a biblioteca padrão oferece mapeamentos práticos prontos para serem usados, como o `defaultdict`, o `ChainMap`, e o `Counter`, todos definidos no módulo `collections`. Com a nova implementação de `dict`, o `OrderedDict` não é mais tão útil quanto antes, mas deve permanecer na bibliotece padrão para manter a compatibilidade retroativa—e por suas características específicas ausentes em `dict`, tal como a capacidade de levar em consideração o ordenamento das chaves em uma comparação `==`. Também no módulo `collections` está o `UserDict`, uma classe base fácil de usar na criação de mapeamentos personalizados.
1223
+
Além do `dict` básico, a biblioteca padrão oferece mapeamentos práticos prontos para serem usados, como o `defaultdict`, o `ChainMap`, e o `Counter`, todos definidos no módulo `collections`. Com a nova implementação de `dict`, o `OrderedDict` não é mais tão útil quanto antes, mas deve permanecer na biblioteca padrão para manter a compatibilidade retroativa—e por suas características específicas ausentes em `dict`, tal como a capacidade de levar em consideração o ordenamento das chaves em uma comparação `==`. Também no módulo `collections` está o `UserDict`, uma classe base fácil de usar na criação de mapeamentos personalizados.
1224
1224
1225
1225
Dois métodos poderosos disponíveis na maioria dos mapeamentos são `setdefault` e `update`. O método `setdefault` pode atualizar itens que mantenham valores mutáveis—por exemplo, em um `dict` de valores `list`—evitando uma segunda busca pela mesma chave. O método `update` permite inserir ou sobrescrever itens em massa a partir de qualquer outro mapeamento, desde iteráveis que forneçam pares `(chave, valor)` até argumentos nomeados. Os construtores de mapeamentos também usam `update` internamente, permitindo que instâncias sejam inicializadas a partir de outros mapeamentos, de iteráveis e de argumentos nomeados.
1226
1226
Desde o Python 3.9 também podemos usar o operador `|=` para atualizar uma mapeamento e
@@ -1243,7 +1243,7 @@ Views de dicionários foram uma grande novidade no Python 3, eliminando o uso de
1243
1243
Na((("dictionaries and sets", "further reading on"))) documentação da Biblioteca Padrão do Python, a seção https://docs.python.org/pt-br/3/library/collections.html["collections—Tipos de dados de contêineres"] inclui exemplos e receitas práticas para vários tipos de mapeamentos. O código-fonte do Python para o módulo, pass:[<em>Lib/collections/__init__.py</em>], é uma excelente referência para qualquer um que deseje criar novos tipos de mapeamentos ou entender a lógica dos tipos existentes. O capítulo 1 do pass:[<a class="orm:hideurl" href="https://fpy.li/pycook3"><em>Python Cookbook</em>, 3rd ed.</a>] (O'Reilly), de David Beazley e Brian K. Jones traz 20 receitas práticas e perpicazes usando estruturas de dados—a maioria mostrando formas inteligentes de usar `dict`.
1244
1244
1245
1245
Greg Gandenberger defende a continuidade do uso de `collections.OrderedDict`,
1246
-
com os argumentos de que "explícito é melhor que implícito," compatibilidade retroativa, e o fato de algumas ferramentas e bilbiotecas presumirem que a ordenação das chaves de um `dict` é irrelevante—nesse post: https://fpy.li/3-18["Python Dictionaries Are Now Ordered. Keep Using OrderedDict" (_Os dicionários do Python agora são ordenados. Continue a usar OrderedDict_)] (EN).
1246
+
com os argumentos de que "explícito é melhor que implícito," compatibilidade retroativa, e o fato de algumas ferramentas e bibliotecas presumirem que a ordenação das chaves de um `dict` é irrelevante—nesse post: https://fpy.li/3-18["Python Dictionaries Are Now Ordered. Keep Using OrderedDict" (_Os dicionários do Python agora são ordenados. Continue a usar OrderedDict_)] (EN).
1247
1247
1248
1248
A https://fpy.li/pep3106[PEP 3106--Revamping dict.keys(), .values() and .items() (_Renovando dict.keys(), .values() e .items()_)] (EN) foi onde Guido van Rossum apresentou o recurso de views de dicionário para o Python 3. No resumo, ele afirma que a ideia veio da Java Collections Framework.
1249
1249
@@ -1295,7 +1295,7 @@ O JSON veio do JavaScript, mas por acaso também é quase um subconjunto exato d
1295
1295
O JSON é compatível com o Python, exceto pela grafia dos valores `true`, `false`, e `null`.
1296
1296
1297
1297
Armin Ronacher https://fpy.li/3-33[tuitou]
1298
-
que gosta de brincar com o espaço de nomes global do Python, para acrescentar apelidos compatíveis com o JSON para o `True`, o `False`,e o `None` do Python, pois daí ele pode colar trechos de JSON diretamente no console.
1298
+
que gosta de brincar com o espaço de nomes global do Python, para acrescentar apelidos compatíveis com o JSON para o `True`, o `False`,e o `None` do Python, pois daí ele pode colar trechos de JSON diretamente no console.
0 commit comments