Script#
Frequentemente é necessário desenvolver um programa mais complexo, usando um editor de texto para preparar um arquivo e executando o arquivo usando o interpretador de Python. Esse arquivo é conhecido como script. À medida que o programa cresce, torna-se interessante dividí-lo em diversos arquivos, para facilitar a manutenção e a compreensão do código. Pode também ser necessário usar uma ou mais funções em diversos programas, sendo indesejável copiar o código da(s) função(ões) para cada programa.
Python atende esses requisitos por meio de scripts chamados módulos. Definições criadas em um módulo podem ser importadas em outros módulos ou no módulo principal (main), que é o módulo que contém as variáveis e funções definidas no script executado.
Um arquivo de módulo deve ter a extensão .py. Vejamos um exemplo retirado da documentação de Python. O código abaixo foi salvo em um arquivo chamado «fibo.py».
# Fibonacci numbers module
def fib(n): # write Fibonacci series up to n
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a+b
print()
def fib2(n): # return Fibonacci series up to n
result = []
a, b = 0, 1
while a < n:
result.append(a)
a, b = b, a+b
return result
Para importar o módulo correspondente, fazemos:
import fibo
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Cell In[2], line 1
----> 1 import fibo
ModuleNotFoundError: No module named 'fibo'
Após a importação, podemos usar as funções do módulo fibo da seguinte maneira:
fibo.fib(1000)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[3], line 1
----> 1 fibo.fib(1000)
NameError: name 'fibo' is not defined
fibo.fib2(1000)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[4], line 1
----> 1 fibo.fib2(1000)
NameError: name 'fibo' is not defined
É possível importar as funções do módulo fibo diretamente. Assim, elas podem ser chamadas sem ser precedidas pelo nome do módulo:
from fibo import fib, fib2
fib(300)
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Cell In[5], line 1
----> 1 from fibo import fib, fib2
2 fib(300)
ModuleNotFoundError: No module named 'fibo'
Note que dessa forma, para ter acesso a todas as funções do módulo, seria necessário declarar cada um dos seus nomes. Isso pode ser feito de forma mais direta usando um asterisco:
from fibo import *
fib2(300)
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Cell In[6], line 1
----> 1 from fibo import *
2 fib2(300)
ModuleNotFoundError: No module named 'fibo'
Isso irá importar todos os identificadores do módulo que não começam com underline (_). A importação com asterisco não costuma ser muito usada, porque comumente resulta em código de difícil leitura.
O comando import pode usar o operador as para atribuir um nome diferente ao módulo ou a uma função:
import fibo as f
f.fib(200)
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Cell In[7], line 1
----> 1 import fibo as f
2 f.fib(200)
ModuleNotFoundError: No module named 'fibo'
from fibo import fib as fibonacci
fibonacci(100)
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Cell In[8], line 1
----> 1 from fibo import fib as fibonacci
2 fibonacci(100)
ModuleNotFoundError: No module named 'fibo'