|
|
|
@ -974,6 +974,134 @@ class MockRoboDeLimpeza(RoboDeLimpeza, MockRobo)
|
|
|
|
|
</section> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<section> |
|
|
|
|
<h2>Módulos, imports e Namespaces</h2> |
|
|
|
|
|
|
|
|
|
<p>Existem dois tipos de módulos:</p> |
|
|
|
|
|
|
|
|
|
<ul> |
|
|
|
|
<li>Arquivos com funções;</li> |
|
|
|
|
<li>Diretórios com arquivos Python.</li> |
|
|
|
|
</ul> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<h3>Arquivos com funções</h3> |
|
|
|
|
|
|
|
|
|
<p><code>modulo.py</code></p> |
|
|
|
|
|
|
|
|
|
<pre><code class="hljs"> |
|
|
|
|
def funcao(a, b): |
|
|
|
|
return a * b |
|
|
|
|
</code></pre> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<h3>Arquivos com funções</h3> |
|
|
|
|
|
|
|
|
|
<pre><code class="hljs"> |
|
|
|
|
>>> import modulo |
|
|
|
|
>>> modulo.funcao(1, 2) |
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
<p> |
|
|
|
|
No caso, o "namespace" do módulo (modulo) foi |
|
|
|
|
importando para o namespace atual; as funções |
|
|
|
|
permanecem dentro do namespace original. |
|
|
|
|
</p> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<h3>Arquivos com funções</h3> |
|
|
|
|
|
|
|
|
|
<pre><code class="hljs"> |
|
|
|
|
>>> from modulo import funcao |
|
|
|
|
>>> funcao(1, 2) |
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
<p> |
|
|
|
|
Importado apenas uma função do módulo <code>modulo</code>; |
|
|
|
|
a função é adicionada no namespace atual. |
|
|
|
|
</p> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<h3>Diretórios com arquivos</h3> |
|
|
|
|
|
|
|
|
|
<p> |
|
|
|
|
Para um diretório ser reconhecido como módulo, é preciso |
|
|
|
|
que exista um arquivo <code>__init__.py</code> dentro dele. |
|
|
|
|
</p> |
|
|
|
|
|
|
|
|
|
<p class="fragment"> |
|
|
|
|
... apenas para Python 2; Python 3 removeu |
|
|
|
|
esse requisito. |
|
|
|
|
</p> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<h3>Diretórios com arquivos</h3> |
|
|
|
|
|
|
|
|
|
<p><code>utils/modulo.py</code></p> |
|
|
|
|
|
|
|
|
|
<pre><code class="hljs"> |
|
|
|
|
def funcao(a, b): |
|
|
|
|
return a * b |
|
|
|
|
</code></pre> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<h3>Diretórios com arquivos</h3> |
|
|
|
|
|
|
|
|
|
<p> |
|
|
|
|
Sem o arquivo <code>__init__.py</code>, o import falha |
|
|
|
|
(no Python 2) |
|
|
|
|
</p> |
|
|
|
|
|
|
|
|
|
<pre><code class="hljs"> |
|
|
|
|
>>> import utils.module |
|
|
|
|
Traceback (most recent call last): |
|
|
|
|
File "<stdin>", line 1, in <module> |
|
|
|
|
ImportError: No module named utils.module |
|
|
|
|
</code></pre> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<h3>Diretórios com arquivos</h3> |
|
|
|
|
|
|
|
|
|
<p> |
|
|
|
|
Com o arquivo <code>__init__.py</code>, o import funciona. |
|
|
|
|
</p> |
|
|
|
|
|
|
|
|
|
<pre><code class="hljs"> |
|
|
|
|
>>> import utils.module |
|
|
|
|
>>> utils.module.funcao(1, 2) |
|
|
|
|
</code></pre> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<h3>Diretórios com arquivos</h3> |
|
|
|
|
|
|
|
|
|
<p> |
|
|
|
|
Importando o módulo sem o nome do arquivo, é importado o conteúdo |
|
|
|
|
do próprio <code>__init__.py</code>: |
|
|
|
|
</p> |
|
|
|
|
|
|
|
|
|
<p><code>__init__.py</code></p> |
|
|
|
|
|
|
|
|
|
<pre><code class="hljs"> |
|
|
|
|
def mult(a, b): |
|
|
|
|
return a * b |
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
|
<pre><code class="hljs"> |
|
|
|
|
>>> import utils |
|
|
|
|
>>> utils.mult(1, 2) |
|
|
|
|
</code></pre> |
|
|
|
|
</section> |
|
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
<section> |
|
|
|
|
<h2>Mais Esquisitices de Python</h2> |
|
|
|
|
</section> |
|
|
|
@ -1363,7 +1491,7 @@ class MockRoboDeLimpeza(RoboDeLimpeza, MockRobo)
|
|
|
|
|
|
|
|
|
|
<pre><code class="hljs"> |
|
|
|
|
>>> a = [1, 2, 3] |
|
|
|
|
>>> [item for item in a if item > 2] |
|
|
|
|
>>> [item for item in a if item > 2] |
|
|
|
|
>>> [3] |
|
|
|
|
</code></pre> |
|
|
|
|
|
|
|
|
@ -1371,7 +1499,7 @@ class MockRoboDeLimpeza(RoboDeLimpeza, MockRobo)
|
|
|
|
|
|
|
|
|
|
<pre><code class="hljs"> |
|
|
|
|
>>> a = [1, 2, 3] |
|
|
|
|
>>> filter(lambda f: f > 2, a) |
|
|
|
|
>>> filter(lambda f: f > 2, a) |
|
|
|
|
>>> [3] |
|
|
|
|
</code></pre> |
|
|
|
|
</section> |
|
|
|
|