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) print_phrase(CONSONANTS)
def unknown():
"""We don't know what to do."""
print('Dude, option!')
if __name__ == "__main__": if __name__ == "__main__":
args = ArgumentParser() args = ArgumentParser()
args.add_argument('-t', '--totally', args.add_argument('-t', '--totally',
dest='totally', dest='type',
default=False, action='store_const',
action='store_true', const='totally',
help='Like, toootaly random') help='Like, toootaly random')
args.add_argument('-s', '--short', args.add_argument('-s', '--short',
dest='short', dest='type',
default=False, action='store_const',
action='store_true', const='switch'
help='Not so random') help='Not so random')
result = args.parse_args() result = args.parse_args()
if result.totally: callbacks = {
totally_random() 'totally': totally_random,
elif result.short: 'switch': switch_two
switch_two() }
else:
print('Dude, option!')</code></pre> func = callbacks.get(result.type, unknown)
func()</code></pre>
</section> </section>
</section> </section>
@ -942,14 +948,14 @@ if __name__ == "__main__":
<pre><code> <pre><code>
args = ArgumentParser() args = ArgumentParser()
args.add_argument('-t', '--totally', args.add_argument('-t', '--totally',
dest='totally', dest='type',
default=False, action='store_const',
action='store_true', const='totally',
help='Like, toootaly random') help='Like, toootaly random')
args.add_argument('-s', '--short', args.add_argument('-s', '--short',
dest='short', dest='type',
default=False, action='store_const',
action='store_true', const='switch'
help='Not so random') help='Not so random')
result = args.parse_args() result = args.parse_args()
</code></pre> </code></pre>
@ -967,25 +973,61 @@ if __name__ == "__main__":
<section> <section>
<section> <section>
<h2>E os finalmentes...</h2> <h2>Funções são cidadãos de primeira classe</h2>
<pre><code> <pre><code>
if result.totally: callbacks = {
totally_random() 'totally': totally_random,
elif result.short: 'switch': switch_two
switch_two() }
else: func = callbacks.get(result.type, unknown)
print('Dude, option!')</code></pre> func()
</code></pre>
<aside class="notes"> <aside class="notes">
E a gente simplesmente acessa as propriedades "Cidadão de primeira classe" significa que
do objeto de resultado do `parse_args` e, funções são tratadas como qualquer outro
se for verdadeiro (True), executamos objeto/elemento/variável. No caso estamos
uma função ou a outra. 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> </aside>
</section> </section>
</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 data-background='_images/thats-all-folks.jpg'>
<section> <section>
<h1 class="fragment semi-opaque">Perguntas?</h1> <h1 class="fragment semi-opaque">Perguntas?</h1>

Loading…
Cancel
Save