|
|
@ -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> |
|
|
|