Browse Source

added swtich

master
Julio Biason 7 years ago
parent
commit
106fecf9ae
  1. 100
      fugindo-com-python-2.html

100
fugindo-com-python-2.html

@ -153,26 +153,32 @@ def switch_two():
print_phrase(CONSONANTS)
def unknown():
"""We don't know what to do."""
print('Dude, option!')
if __name__ == "__main__":
args = ArgumentParser()
args.add_argument('-t', '--totally',
dest='totally',
default=False,
action='store_true',
dest='type',
action='store_const',
const='totally',
help='Like, toootaly random')
args.add_argument('-s', '--short',
dest='short',
default=False,
action='store_true',
dest='type',
action='store_const',
const='switch'
help='Not so random')
result = args.parse_args()
if result.totally:
totally_random()
elif result.short:
switch_two()
else:
print('Dude, option!')</code></pre>
callbacks = {
'totally': totally_random,
'switch': switch_two
}
func = callbacks.get(result.type, unknown)
func()</code></pre>
</section>
</section>
@ -942,14 +948,14 @@ if __name__ == "__main__":
<pre><code>
args = ArgumentParser()
args.add_argument('-t', '--totally',
dest='totally',
default=False,
action='store_true',
dest='type',
action='store_const',
const='totally',
help='Like, toootaly random')
args.add_argument('-s', '--short',
dest='short',
default=False,
action='store_true',
dest='type',
action='store_const',
const='switch'
help='Not so random')
result = args.parse_args()
</code></pre>
@ -967,25 +973,61 @@ if __name__ == "__main__":
<section>
<section>
<h2>E os finalmentes...</h2>
<h2>Funções são cidadãos de primeira classe</h2>
<pre><code>
if result.totally:
totally_random()
elif result.short:
switch_two()
else:
print('Dude, option!')</code></pre>
callbacks = {
'totally': totally_random,
'switch': switch_two
}
func = callbacks.get(result.type, unknown)
func()
</code></pre>
<aside class="notes">
E a gente simplesmente acessa as propriedades
do objeto de resultado do `parse_args` e,
se for verdadeiro (True), executamos
uma função ou a outra.
"Cidadão de primeira classe" significa que
funções são tratadas como qualquer outro
objeto/elemento/variável. No caso estamos
criado um dicionário onde a chave é uma
string (não por coincidência as mesmas
strings que estão no argumentparser) e
o valor são funções.
Dicionários são objetos como strings e
possuem uma função `get()`; essa função
retorna o valor da entrada com a chave
indicada e, caso não exista, retorna um valor
padrão (que normalmente é `None`).
Aqui temos, então, uma relação das possíveis
strings que existem no ArgumentParser e as
funções que podem ser chamadas; com o valor
vindo da linha de comando, selecionamos a
função `totally_random` ou `switch_two` ou,
ainda, se o valor de `type` não existir,
assume-se `unkonwn` -- de certa forma, agora
`func` é um ponteiro para uma função.
E para executar a função apontada pela variável,
basta colocar os parênteses, como faria com
qualquer função em Python.
E esse é basicamente o formato de como se faz
`switch` em Python.
</aside>
</section>
</section>
<section>
<section data-background="_images/python.jpg">
<h1 class="semi-opaque">Fulindo para as Cojinas com Python</h1>
</section>
<section data-background="_images/python.jpg">
<h1 class="semi-opaque">Fucindo para as Lonijas com Python</h1>
</section>
</section>
<section data-background='_images/thats-all-folks.jpg'>
<section>
<h1 class="fragment semi-opaque">Perguntas?</h1>

Loading…
Cancel
Save