|
|
@ -402,16 +402,264 @@ soma(segundo=3, primeiro=2) |
|
|
|
precisar voltar e ver quais são os parâmetros. |
|
|
|
precisar voltar e ver quais são os parâmetros. |
|
|
|
</aside> |
|
|
|
</aside> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<h2>Funções</h2> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre><code> |
|
|
|
|
|
|
|
def soma(primeiro=0, segundo=0): |
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre><code> |
|
|
|
|
|
|
|
soma() |
|
|
|
|
|
|
|
soma(1) |
|
|
|
|
|
|
|
soma(segundo=3) |
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
|
|
|
Parâmetros também podem ser opcionais, passando |
|
|
|
|
|
|
|
o valor que o mesmo vai ter se não for passado. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
E, com nomes nos parâmetros, é possível "pular" |
|
|
|
|
|
|
|
por parâmetros que tem valor default. |
|
|
|
|
|
|
|
</aside> |
|
|
|
|
|
|
|
</section> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
<section> |
|
|
|
<section> |
|
|
|
<section> |
|
|
|
<h2>Welcome to Hell</h2> |
|
|
|
<h2>Pausa: Varargs</h2> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre><code> |
|
|
|
|
|
|
|
def soma(primeiro, segundo): |
|
|
|
|
|
|
|
total = primeiro + segundo |
|
|
|
|
|
|
|
return total |
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre class="fragment"><code> |
|
|
|
|
|
|
|
soma(1) |
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre class="fragment"><code> |
|
|
|
|
|
|
|
soma(1, 2, 3) |
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
|
|
|
O que acontece quando não se passa a quantidade correta |
|
|
|
|
|
|
|
de parâmetros para uma função? |
|
|
|
|
|
|
|
</aside> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<h2>Pausa: Varargs</h2> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre><code> |
|
|
|
|
|
|
|
TypeError: soma() takes exactly 2 arguments (3 given) |
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
|
|
|
Simplesmente, o Python se recusa a executar porque não |
|
|
|
|
|
|
|
foi passado o número correto de parâmetros. |
|
|
|
|
|
|
|
</aside> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<h2>Pausa: Varargs</h2> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre><code> |
|
|
|
|
|
|
|
def soma(*valores): |
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
|
|
|
Entram os varargs: Quando um parâmetro tem um asterísco |
|
|
|
|
|
|
|
na frente do nome, ele significa "colete tudo que foi |
|
|
|
|
|
|
|
passado que não conseguiu associar a um parâmetro e |
|
|
|
|
|
|
|
retorne como lista" |
|
|
|
|
|
|
|
</aside> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<h2>Pausa: Varargs</h2> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre><code> |
|
|
|
|
|
|
|
def soma(*valores): |
|
|
|
|
|
|
|
print(valores) |
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre><code> |
|
|
|
|
|
|
|
soma(1, 2, 3, 4, 5) |
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre class="fragment"><code> |
|
|
|
|
|
|
|
[1, 2, 3, 4, 5] |
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<h2>Pausa: Varargs</h2> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre><code> |
|
|
|
|
|
|
|
def soma(inicial, segundo=0, *valores): |
|
|
|
|
|
|
|
print(inicial) |
|
|
|
|
|
|
|
print(segundo) |
|
|
|
|
|
|
|
print(valores) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre><code> |
|
|
|
|
|
|
|
soma(2) |
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre><code> |
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
[] |
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<h2>Pausa: Varargs</h2> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p> |
|
|
|
|
|
|
|
E o que acontece com parâmetros com nomes? |
|
|
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<h2>Pausa: Varargs</h2> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre><code> |
|
|
|
|
|
|
|
def soma(**valores): |
|
|
|
|
|
|
|
print(valores) |
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre><code> |
|
|
|
|
|
|
|
soma(primeiro=1, segundo=2) |
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre><code> |
|
|
|
|
|
|
|
{'primeiro': 1, 'segundo': 2} |
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
|
|
|
Para capturar parâmetros com nomes, usam-se |
|
|
|
|
|
|
|
dois asteríscos na frente do nome. Assim como um |
|
|
|
|
|
|
|
asterísco significa "capture tudo que não for |
|
|
|
|
|
|
|
capturado por parâmetros normais", dois asteríscos |
|
|
|
|
|
|
|
significam "capture tudo que tiver nome e não |
|
|
|
|
|
|
|
for capturado por parâmetros normais". |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
E agora também vimos como funcionam dicionários |
|
|
|
|
|
|
|
em Python (que são chamadas de "objetos", "arrays |
|
|
|
|
|
|
|
associativos", "mapas" e outros nomes em outras |
|
|
|
|
|
|
|
linguagens). |
|
|
|
|
|
|
|
</aside> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<h2>Pausa: Varargs</h2> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p> |
|
|
|
|
|
|
|
O legal de varargs (e o asterísco) é que ele |
|
|
|
|
|
|
|
funciona pros dois lados: Não só ele transforma |
|
|
|
|
|
|
|
parâmetros em lista, mas ele também pode |
|
|
|
|
|
|
|
funcionar para converter uma lista em parâmetros. |
|
|
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<h2>Pausa: Varargs</h2> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre><code> |
|
|
|
|
|
|
|
params = [4, 4] |
|
|
|
|
|
|
|
soma(*params) |
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<h2>Pausa: Objetos</h2> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p> |
|
|
|
|
|
|
|
Sem entrar em detalhes sobre como |
|
|
|
|
|
|
|
criar objetos: |
|
|
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<ul> |
|
|
|
|
|
|
|
<li class="fragment">Objetos tem métodos (funções associadas a um objeto)</li> |
|
|
|
|
|
|
|
<li class="fragment">Para chamar um método, usa-se '.' e o nome do método</li> |
|
|
|
|
|
|
|
<li class="fragment">Strings são objetos</li> |
|
|
|
|
|
|
|
</ul> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<h2>Pausa: Objetos</h2> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre><code> |
|
|
|
|
|
|
|
"isso é uma string" |
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
|
|
|
Uma string é um objeto. |
|
|
|
|
|
|
|
</aside> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<h2>Pausa: Objetos</h2> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre><code> |
|
|
|
|
|
|
|
help("isso é uma string") |
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<aside class="notes"> |
|
|
|
|
|
|
|
Pedindo help num objeto vai mostrar o help |
|
|
|
|
|
|
|
da classe do objeto; no caso, serão mostrados |
|
|
|
|
|
|
|
todos os métodos presentes no objeto "str", de |
|
|
|
|
|
|
|
string. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
E é por isso que é interessante colocar docstrings: |
|
|
|
|
|
|
|
help() vai mostrar tudo que aquele objeto faz, |
|
|
|
|
|
|
|
desde que documentado. |
|
|
|
|
|
|
|
</aside> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<h2>Pausa: Objetos</h2> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre><code> |
|
|
|
|
|
|
|
"isso é uma string".capitalize() |
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<pre><code> |
|
|
|
|
|
|
|
frase = "isso é uma string" |
|
|
|
|
|
|
|
frase.capitalize() |
|
|
|
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<h2><span style="color:crimson">Welcome to Hell</span></h2> |
|
|
|
|
|
|
|
|
|
|
|
<pre><code> |
|
|
|
<pre><code> |
|
|
|
print(PASSPHRASE.format(*consonants).capitalize()) |
|
|
|
print(PASSPHRASE.format(*consonants).capitalize()) |
|
|
|
</code></pre> |
|
|
|
</code></pre> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
|
|
|
<h2><span style="color:crimson">Welcome to</span> Hell</h2> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p>O que sabemos:</p> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<ul> |
|
|
|
|
|
|
|
<li class="fragment"><code>PASSPHRASE</code> é uma string.</li> |
|
|
|
|
|
|
|
<li class="fragment"><code>.format</code> deve ser um método de strings.</li> |
|
|
|
|
|
|
|
<li class="fragment"><code>consonants</code> é uma lista</li> |
|
|
|
|
|
|
|
<li class="fragment"><code>*consonants</code> tá transformando a lista em parâmetros</li> |
|
|
|
|
|
|
|
<li class="fragment"><code>capitalize</code> também deve ser um método de strings</li> |
|
|
|
|
|
|
|
</ul> |
|
|
|
|
|
|
|
</section> |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|