Introducción
Contenido
En Python, un módulo es un archivo autónomo con declaraciones y definiciones de Python. Por ejemplo, file.py
, puede considerarse un módulo llamado file
. Esto se diferencia de un paquete en que un paquete es una colección de módulos en directorios que dan estructura y jerarquía a los módulos.
Los módulos nos ayudan a dividir programas grandes en archivos pequeños que son más manejables. Con los módulos, la reutilización del código se convierte en una realidad. Supongamos que tenemos una función que se usa con frecuencia en diferentes programas. Podemos definir esta función en un módulo y luego importarla a los distintos programas sin tener que copiar su código cada vez.
En este artículo, veremos cómo crear módulos Python y cómo usarlos en código Python.
Módulos de escritura
Un módulo es simplemente un archivo de Python con la .py
extensión. El nombre del archivo se convierte en el nombre del módulo. Dentro del archivo, podemos tener definiciones e implementaciones de clases, variables o funciones. Estos se pueden usar en otros programas de Python.
Comencemos por crear una función que simplemente imprima «Hola mundo». Para hacer esto, cree un nuevo archivo Python y guárdelo como hello.py
. Agregue el siguiente código al archivo:
def my_function():
print("Hello World")
Si ejecuta el código anterior, no devolverá nada. Esto se debe a que no le hemos dicho al programa que haga nada. Es cierto que hemos creado una función llamada my_function()
dentro del código, pero no hemos llamado ni invocado la función. Cuando se invoca, esta función debe imprimir el texto «Hola mundo».
Ahora, muévase al mismo directorio donde guardó el archivo anterior y cree un nuevo archivo llamado main.py
. Agregue el siguiente código al archivo:
import hello
hello.my_function()
Salida
Hello World
La función se invocó correctamente. Comenzamos importando el módulo. El nombre del archivo era hello.py
, por lo tanto, el nombre del módulo importado es hello
.
Además, tenga en cuenta la sintaxis que hemos utilizado para invocar la función. Esto se denomina «notación de puntos», que nos permite llamar a la función especificando primero el nombre del módulo y luego el nombre de la función.
Sin embargo, esa es solo una forma de importar el módulo e invocar la función. Podríamos haberlo hecho de la siguiente manera:
from hello import my_function
my_function()
Salida
Hello World
En el ejemplo anterior, la primera línea ordena al intérprete de Python que importe una función llamada my_function
de un módulo llamado hello
. En tal caso, no tiene que usar la notación de puntos para acceder a la función, simplemente puede llamarla directamente.
Sin embargo, en el caso donde nuestro hello
módulo tiene múltiples funciones, la declaración from hello import my_function
no importará todo hello
funciones en nuestro programa, solo my_function
. Si intenta acceder a cualquier otra función, se generará un error. Tiene que importar todo el módulo o importar cada función individual para poder usarlas.
Podemos definir una variable dentro de un módulo, que luego puede ser utilizada por otros módulos. Para demostrar esto, abra el archivo hello.py
y agregue el siguiente código:
def my_function():
print("Hello World")
# The variable that'll be used in other modules
name = "Nicholas"
Ahora, abre el main.py
archivo y modificarlo de la siguiente manera:
import hello
hello.my_function()
print(hello.name)
Salida
Hello World
Nicholas
Hemos invocado con éxito tanto la función como la variable definida en el módulo, ya que importamos todo el módulo en lugar de solo el my_function()
función.
Dijimos anteriormente que podemos definir una clase dentro de un módulo. Veamos cómo hacer esto en el siguiente ejemplo. Abre el hello.py
archivo y modificarlo de la siguiente manera:
def my_function():
print("Hello World")
# Defining our variable
name = "Nicholas"
# Defining a class
class Student:
def __init__(self, name, course):
self.course = course
self.name = name
def get_student_details(self):
print("Your name is " + self.name + ".")
print("You are studying " + self.course)
Aquí hemos definido una clase llamada Student
. Se han definido dos variables en esta clase, name
y course
. El método get_student_details()
También se ha definido dentro de este, que imprime los datos del alumno en la consola.
Ahora, abre el archivo main.py
y modificarlo de la siguiente manera:
import hello
hello.my_function()
print(hello.name)
nicholas = hello.Student("Nicholas", "Computer Science")
nicholas.get_student_details()
Salida
Hello World
Nicholas
Your name is Nicholas.
You are studying Computer Science
En el script anterior, nuevamente usamos la notación de puntos para crear un objeto de la student
clase de la hello
módulo. Luego usamos el get_student_details()
función para obtener los detalles del estudiante.
Aunque los módulos consisten principalmente en definiciones de clases (en la mayoría de los casos), también es posible que ejecuten su propio código cuando se importan. Para demostrar esto, modifiquemos el hello.py
archivo, donde tenemos una definición de la función my_function()
, junto con la llamada a la función:
def my_function():
print("Hello World")
my_function()
Ahora, abre el archivo main.py
y borre todas las líneas excepto las siguientes:
import hello
Salida
Hello World
La salida anterior muestra que definimos y llamamos a la función dentro del módulo. Cuando se importa el módulo, devuelve directamente el resultado de la función sin tener que invocar la función. Este comportamiento no siempre se desea, pero es útil para ciertos casos de uso, como la carga previa de datos desde la caché cuando se importa el módulo.
Importar todos los objetos del módulo
Para importar todos los objetos (funciones, variables, clases, etc.) de un módulo, podemos usar el import *
declaración. Por ejemplo, para importar todos los objetos contenidos en el hello
módulo, podemos usar la siguiente declaración:
from hello import *
Después de agregar la declaración anterior a un programa, podremos usar cualquier función, variable o clase contenida en el hello
módulo sin tener que anteponerlo con hello
.
Acceder a un módulo desde otra ruta
En Python, los módulos se utilizan en más de un proyecto. Por lo tanto, no tiene sentido si mantiene sus módulos en el directorio de uno de los proyectos, ya que otros proyectos no podrían usarlo tan fácilmente.
Tiene un par de opciones siempre que necesite acceder a un módulo que no está almacenado en el mismo directorio que su programa. Analicemos estos en las siguientes secciones:
Agregar rutas
Para importar un módulo desde otra ruta, primero debe importar el sys
module así como cualquier otro módulo de Python que le gustaría usar en su programa.
los sys
El módulo es proporcionado por la biblioteca estándar de Python y proporciona funciones y parámetros que son específicos del sistema. los path.append()
función de la sys
El módulo se puede utilizar para agregar la ruta del módulo al proyecto actual.
Para demostrar esto, corte el hello.py
archivo del directorio donde tiene el archivo main.py
. Péguelo en otro directorio. En mi caso, lo he pegado en el directorio «F: Python».
Ahora, abre el archivo main.py
, importar el sys
módulo y especifique la ruta en la que el intérprete de Python buscará archivos. Esto se demuestra a continuación:
import sys
sys.path.append('F:/Python/')
import hello
Salida
Hello World
En el guión anterior, la línea sys.path.append('F:/Python/')
le dice al intérprete de Python que incluya esta ruta en la lista de rutas que se buscarán al importar los módulos.
Agregar un módulo a la ruta de Python
El método anterior funciona solo si importa el sys
módulo. Si no importa el sys
module y especifique la ruta al módulo, se generará un error. Para que el módulo esté disponible para todo el sistema, puede agregarlo a la ruta donde Python normalmente busca módulos y paquetes. De esta forma, no tendrá que importar el sys
module y especifique la ruta al módulo como hemos hecho en la sección anterior.
Antes de hacer cualquier otra cosa, primero debe identificar la ruta en la que Python busca módulos y paquetes. Simplemente abra la línea de comando de su sistema operativo y ejecute el python
mando. Esto lo llevará a la terminal de Python.
Importar el sys
módulo de la siguiente manera:
import sys
Luego puede ejecutar el siguiente comando para imprimir la ruta:
print(sys.path)
La salida contendrá al menos una ruta del sistema. Si lo hace desde un entorno de programación, obtendrá varias rutas. En mi caso, obtuve lo siguiente:
Te puede interesar:Desarrollo de aplicaciones Python sin servidor con AWS Chalice$ python
Python 2.7.10 (default, Oct 23 2015, 19:19:21)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)
['', '/Library/Python/2.7/site-packages/six-1.10.0-py2.7.egg', '/Library/Python/2.7/site-packages/cffi-1.2.1-py2.7-macosx-10.9-intel.egg', '/Library/Python/2.7/site-packages/pycparser-2.14-py2.7.egg', '/Library/Python/2.7/site-packages/virtualenv-13.1.2-py2.7.egg', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/Library/Python/2.7/site-packages']
>>>
Su objetivo debe ser encontrar uno en el entorno que está utilizando actualmente. Debería buscar algo como lo siguiente:
/Library/Python/2.7/site-packages
Mueve tu hello.py
archivo a la ruta. Después de eso, podrá importar el hello
módulo desde cualquier directorio de la forma habitual, como se muestra a continuación:
import hello
Salida
Hello World
Conclusión
Esto marca el final de este artículo. Un módulo es simplemente un archivo de Python con un conjunto de variables y definiciones de funciones. Un módulo facilita la reutilización del código, ya que puede definir una función en un módulo e invocarla desde diferentes programas en lugar de tener que definir la función en cada programa. Aunque un módulo se usa principalmente para definiciones de funciones y clases, también puede exportar variables e instancias de clases.