Skip to content

Commit 5567a99

Browse files
committed
vol2, cap09: revisão de estilo
1 parent 1feb7e2 commit 5567a99

File tree

16 files changed

+287
-263
lines changed

16 files changed

+287
-263
lines changed

code/09-closure-deco/clock/clockdeco_param.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,25 @@
1212
# tag::CLOCKDECO_PARAM[]
1313
import time
1414

15-
DEFAULT_FMT = '[{elapsed:0.8f}s] {name}({args}) -> {result}'
15+
DEFAULT_FMT = '[{elapsed:0.8f}s] {name}({args}) -> {result}' # <1>
1616

17-
def clock(fmt=DEFAULT_FMT): # <1>
18-
def decorate(func): # <2>
19-
def clocked(*_args): # <3>
17+
def clock(fmt=DEFAULT_FMT): # <2>
18+
def decorate(func): # <3>
19+
def clocked(*_args): # <4>
2020
t0 = time.perf_counter()
21-
_result = func(*_args) # <4>
21+
_result = func(*_args) # <5>
2222
elapsed = time.perf_counter() - t0
2323
name = func.__name__
24-
args = ', '.join(repr(arg) for arg in _args) # <5>
25-
result = repr(_result) # <6>
26-
print(fmt.format(**locals())) # <7>
27-
return _result # <8>
28-
return clocked # <9>
29-
return decorate # <10>
24+
args = ', '.join(repr(arg) for arg in _args) # <6>
25+
result = repr(_result) # <7>
26+
print(fmt.format(**locals())) # <8>
27+
return _result # <9>
28+
return clocked # <10>
29+
return decorate # <11>
3030

3131
if __name__ == '__main__':
3232

33-
@clock() # <11>
33+
@clock() # <12>
3434
def snooze(seconds):
3535
time.sleep(seconds)
3636

guia-de-estilo.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ Termo em inglês adotado::
135135
|✅ _hashable_ (adj.) |❓ |
136136
|✅ _hook_ (s.m.) |❗gancho |
137137
|❗ _I/O bound_ | ✅ limitado por E/S |
138+
|❗ _import time_ | ✅ momento da importação | 🔎 tempo de importação
138139
|❗ _in place_ | ✅ internamente, interno | 🔎 no mesmo lugar
139140
|❗ _keyword argument_ | ✅ argumento nomeado | 🔎 argumento de palavra-chave
140141
|❗ _lock_ | ✅ trava |

images/diagrama9-1.odg

95.1 KB
Binary file not shown.

images/diagrama9-1.png

203 KB
Loading

images/flpy_0901-EN.png

28.2 KB
Loading

online/cap09.adoc

Lines changed: 249 additions & 233 deletions
Large diffs are not rendered by default.

online/cap10.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ startref="FDPrefactor10")))((("", startref="RSfind10")))
419419

420420

421421
[[decorated_strategy]]
422-
=== Padrão Estratégia aperfeiçoado com um decorador
422+
=== Padrão Estratégia melhorado com decorador
423423

424424
Lembre-se((("functions, design patterns with first-class", "decorator-enhanced
425425
strategy pattern", id="FDPdecorator10")))((("refactoring strategies",

online/cap12.adoc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ Essa mudança foi replicada para as implementações seguintes de `Vector` aqui
3131

3232
Vamos começar.
3333

34-
=== Vector: Um tipo sequência definido pelo usuário
34+
=== Vector: tipo sequência definido pelo usuário
3535

3636
Nossa((("sequences, special methods for", "Vector implementation strategy")))((("Vector class, multidimensional", "implementation strategy"))) estratégia na implementação de `Vector` será usar composição, não herança. Vamos armazenar os componentes em um array de números de ponto flutuante, e implementar os métodos necessários para que nossa classe `Vector` se comporte como uma sequência plana imutável.
3737

@@ -153,7 +153,7 @@ Vamos agora implementar o protocolo sequência em `Vector`, primeiro sem suporte
153153

154154

155155
[[sliceable_sequence_sec]]
156-
=== Vector versão #2: Uma sequência fatiável
156+
=== Vector versão #2: sequência fatiável
157157

158158
Como((("Vector class, multidimensional", "sliceable sequences", id="VCMslice12")))((("sequences, special methods for", "sliceable sequences", id="SSMslice12")))((("slicing", "sliceable sequences", id="Sslseq12")))((("&#x005F;&#x005F;len&#x005F;&#x005F;", id="len12")))((("&#x005F;&#x005F;getitem&#x005F;&#x005F;", id="getitem12"))) vimos no exemplo da classe `FrenchDeck`, suportar o protocolo de sequência é muito fácil se você puder delegar para um atributo sequência em seu objeto, como nosso array `self._components`. Esses `+__len__+` e `+__getitem__+` de uma linha são um bom começo:
159159

@@ -320,7 +320,7 @@ include::../code/12-seq-hacking/vector_v2.py[tags=VECTOR_V2_DEMO]
320320
<4> `Vector` não suporta indexação multidimensional, então tuplas de índices ou de fatias geram um erro.((("", startref="getitem12")))((("", startref="len12")))((("", startref="Sslseq12")))((("", startref="SSMslice12")))((("", startref="VCMslice12")))
321321

322322
[[vector_dynamic_attrs_sec]]
323-
=== Vector versão #3: acesso dinâmico a atributos
323+
=== Vector versão #3: atributos dinâmicos
324324

325325
Ao((("Vector class, multidimensional", "dynamic attribute access", id="VCMdyn12")))((("sequences, special methods for", "dynamic attribute access", id="SSMdyn12")))((("&#x005F;&#x005F;getattr&#x005F;&#x005F;", id="getattr12")))((("attributes", "dynamic attribute access", id="Adyn12"))) evoluir `Vector2d` para `Vector`, perdemos a habilidade de acessar os componentes do vetor por nome (por exemplo, `v.x`, `v.y`). Agora estamos trabalhando com vetores que podem ter um número grande de componentes. Ainda assim, pode ser conveniente acessar os primeiros componentes usando letras como atalhos, algo como `x`, `y`, `z` em vez de `v[0]`, `v[1]`, and `v[2]`.
326326

online/cap24.adoc

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -516,17 +516,22 @@ Para fazer metaprogramação de classes, precisamos saber quando o interpretador
516516
[[import_v_runtime_sec]]
517517
=== O que acontece quando: importação versus execução
518518

519-
Programadores Python((("class metaprogramming", "import time versus runtime", id="CMimport24")))((("import time versus runtime"))) falam de "importação" (_import time_) versus "execução" (_runtime_), mas estes termos não têm definições precisas e há uma zona cinzenta entre eles.
519+
Programadores Python((("class metaprogramming", "import time versus runtime", id="CMimport24")))((("import time versus runtime"))) falam de "momento da importação" (_import time_) versus "momento de execução" (_run time_), mas estes termos não têm definições precisas e há uma zona cinzenta entre eles.
520520

521-
Na importação, o interpretador:
521+
No momento da importação, o interpretador:
522522

523-
. Analisa o código-fonte de módulo _.py_ em uma passagem, de cima até embaixo. É aqui que um `SyntaxError` pode ocorrer.
523+
. Analisa o código-fonte de módulo _.py_ em uma passagem, da primeira até a última linha. É aqui que um `SyntaxError` pode ocorrer.
524524
. Compila o _bytecode_ a ser executado.
525525
. Executa o código no nível superior do módulo compilado.
526526

527-
Se existir um arquivo _.pyc_ atualizado no `+__pycache__+` local, a análise e a compilação são omitidas, pois o _bytecode_ está pronto para ser executado.
527+
Se existir um arquivo _.pyc_ atualizado no `+__pycache__+` local,
528+
a análise e a compilação são omitidas, pois o _bytecode_ está pronto para ser executado.
528529

529-
Apesar da análise e a compilação serem definitivamente atividades de "importação", outras coisas podem acontecer durante o processo, pois quase todos os comandos ou instruções no Python são executáveis, no sentido de poderem potencialmente rodar código do usuário e modificar o estado do programa do usuário.
530+
Apesar da análise e a compilação serem definitivamente atividades de "importação",
531+
outras coisas podem acontecer durante este processo,
532+
pois quase todos os comandos ou instruções no Python são executáveis,
533+
no sentido de poderem potencialmente rodar código do usuário
534+
e modificar o estado do programa do usuário.
530535

531536
Em especial, a instrução `import` não é meramente uma declaraçãofootnote:[Compare com a instrução `import` em Java, que é apenas uma declaração para informar o compilador que determinados pacotes são necessários.], pois na verdade ela executa todo o código no nível superior de um módulo, quando este é importado para o processo pela primeira vez. Importações posteriores do mesmo módulo usarão um _cache_, e então o único efeito será a vinculação dos objetos importados a nomes no módulo cliente. Aquele código no primeiro nível pode fazer qualquer coisa, incluindo ações típicas da "execução", como escrever em um arquivo de log ou conectar-se a um banco de dados.footnote:[Não estou dizendo que é uma boa ideia abrir uma conexão com um banco de dados só porque o módulo foi importado, apenas apontando que isso pode ser feito.]
532537
Por isso a fronteira entre a "importação" e a "execução" é difusa: `import` pode acionar todo tipo de comportamento de "execução", porque a instrução `import` e a função embutida

print/contra-capa.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ _Python Fluente_, o livro definitivo sobre Python.
2424

2525
image::fpy.li-pf2q.png[]
2626

27-
27+
2828
# Texto para orelha da contra-capa (espiral)
2929

3030
## Python Fluente, 2ª edição

0 commit comments

Comments
 (0)