Módulos de Python
Un módulo de Python (Module) es un archivo de Python que termina en .py y contiene definiciones de objetos de Python y sentencias de Python.
Los módulos te permiten organizar lógicamente tus segmentos de código Python.
Asignar código relacionado a un módulo hace que tu código sea más útil y fácil de entender.
Los módulos pueden definir funciones, clases y variables; también pueden contener código ejecutable.
Ejemplo
El siguiente ejemplo es un módulo simple support.py:
Módulo support.py:
Sentencia import
Introducción de módulos
Una vez definido el módulo, podemos usar la sentencia import para introducirlo. La sintaxis es la siguiente:
import module1[, module2[,... moduleN]]
Por ejemplo, para referenciar el módulo math, puedes usar al principio del archivo:import mathpara introducirlo. Al llamar a las funciones del módulo math, debes referenciarlas de esta manera:
nombre del módulo.nombre de la función
Cuando el intérprete encuentra una sentencia import, si el módulo está en la ruta de búsqueda actual, será importado.
La ruta de búsqueda es una lista de todos los directorios que el intérprete buscará primero. Si quieres importar el módulo support.py, debes colocar el comando al principio del script:
Código del archivo test.py:
El resultado del ejemplo anterior es:
Hello : Ejemplo
Un módulo solo se importa una vez, sin importar cuántas veces ejecutes import. Esto evita que el módulo importado se ejecute una y otra vez.
Sentencia from…import
La sentencia from de Python te permite importar una parte específica de un módulo al espacio de nombres actual. La sintaxis es la siguiente:
from modname import name1[, name2[, ... nameN]]
Por ejemplo, para importar la función fibonacci del módulo fib, usa la siguiente sentencia:
from fib import fibonacci
Esta declaración no importa todo el módulo fib al espacio de nombres actual; solo introduce la función fibonacci de fib en la tabla de símbolos global del módulo que ejecuta esta declaración.
Sentencia from…import *
También es posible importar todo el contenido de un módulo al espacio de nombres actual, solo usa la siguiente declaración:
from modname import *
Esto proporciona una forma sencilla de importar todos los elementos de un módulo. Sin embargo, esta declaración no debe usarse en exceso.
Por ejemplo, si queremos introducir todo del módulo math de una vez, la sentencia es la siguiente:
from math import *
Ruta de búsqueda
Cuando importas un módulo, el orden de búsqueda del analizador de Python para la ubicación del módulo es:
- 1. Directorio actual
- 2. Si no está en el directorio actual, Python busca en cada directorio bajo la variable de shell PYTHONPATH.
- 3. Si no lo encuentra, Python revisa la ruta predeterminada. En UNIX, la ruta predeterminada suele ser /usr/local/lib/python/.
La ruta de búsqueda de módulos se almacena en la variable sys.path del módulo system. La variable contiene el directorio actual, PYTHONPATH y los directorios predeterminados determinados por el proceso de instalación.
Variable PYTHONPATH
Como variable de entorno, PYTHONPATH se compone de muchos directorios agrupados en una lista. La sintaxis de PYTHONPATH es la misma que la variable de shell PATH.
En sistemas Windows, un PYTHONPATH típico es el siguiente:
set PYTHONPATH=c:\python27\lib;
En sistemas UNIX, un PYTHONPATH típico es el siguiente:
set PYTHONPATH=/usr/local/lib/python
Espacios de nombres y ámbitos
Las variables son nombres (identificadores) que tienen objetos correspondientes. Un espacio de nombres es un diccionario que contiene los nombres de variables (claves) y sus respectivos objetos (valores).
Una expresión de Python puede acceder a variables en el espacio de nombres local y en el espacio de nombres global. Si una variable local y una global tienen el mismo nombre, la variable local sobrescribirá a la global.
Cada función tiene su propio espacio de nombres. Las reglas de ámbito de los métodos de una clase son las mismas que las de las funciones normales.
Python adivina inteligentemente si una variable es local o global; asume que cualquier variable asignada dentro de una función es local.
Por lo tanto, si deseas asignar un valor a una variable global dentro de una función, debes usar la sentencia global.
La expresión global VarName le dice a Python que VarName es una variable global, de modo que Python no buscará esta variable en el espacio de nombres local.
Por ejemplo, definimos una variable Money en el espacio de nombres global. Luego asignamos un valor a Money dentro de una función, y Python asumirá que Money es una variable local. Sin embargo, no declaramos una variable local Money antes de accederla, por lo que aparecerá un error UnboundLocalError. Descomentar la sentencia global puede resolver este problema.
#!/usr/bin/python # -*- coding: UTF-8 -*- Money = 2000 def AddMoney(): # 想改正代码就取消以下注释: # global Money Money = Money + 1 print Money AddMoney() print Money
Función dir()
La función dir() devuelve una lista ordenada de cadenas, cuyo contenido son los nombres definidos en un módulo.
La lista devuelta contiene todos los módulos, variables y funciones definidos en un módulo. A continuación un ejemplo simple:
#!/usr/bin/python # -*- coding: UTF-8 -*- # 导入内置math模块 import math content = dir(math) print content;
El resultado del ejemplo anterior es:
['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh']
Aquí, la variable especial de cadena __name__ apunta al nombre del módulo, y __file__ apunta al nombre del archivo de importación de dicho módulo.
Funciones globals() y locals()
Según el lugar donde se llamen, las funciones globals() y locals() se pueden usar para devolver los nombres en los espacios de nombres global y local.
Si se llama a locals() dentro de una función, devuelve todos los nombres a los que se puede acceder en esa función.
Si se llama a globals() dentro de una función, devuelve todos los nombres globales a los que se puede acceder en esa función.
El tipo de retorno de ambas funciones es un diccionario. Por lo tanto, los nombres pueden extraerse con la función keys().
Función reload()
Cuando un módulo se importa a un script, el código de la parte superior del módulo solo se ejecuta una vez.
Por lo tanto, si deseas volver a ejecutar el código de la parte superior del módulo, puedes usar la función reload(). Esta función reimporta el módulo que fue importado anteriormente. La sintaxis es la siguiente:
reload(module_name)
Aquí, module_name debe ser directamente el nombre del módulo, no una cadena. Por ejemplo, si quieres recargar el módulo hello, hazlo así:
reload(hello)
Paquetes en Python
Un paquete es una estructura de directorios de archivos jerárquica que define un entorno de aplicación de Python compuesto por módulos, subpaquetes, y subpaquetes dentro de subpaquetes, etc.
En términos simples, un paquete es una carpeta, pero debe existir un archivo __init__.py en esa carpeta; el contenido de este archivo puede estar vacío.__init__.pySe utiliza para identificar que la carpeta actual es un paquete.
Considera unpackage_ejemploen el directorioejemplo1.py、ejemplo2.py、__init__.py archivo; test.py es el código para probar la llamada al paquete. La estructura de directorios es la siguiente:
test.py package_ejemplo |-- __init__.py |-- ejemplo1.py |-- ejemplo2.pyEl código fuente es el siguiente:
package_ejemplo/ejemplo1.py
package_ejemplo/ejemplo2.py
Ahora, enpackage_ejemplocrea en el directorio__init__.py:
package_ejemplo/__init__.py
Luego, enpackage_ejemplo el directorio del mismo nivelcreamos test.py para llamarpackage_ejemploPaquete
test.py
El resultado del ejemplo anterior es:
package_ejemplo 初始化 I'm in ejemplo1 I'm in ejemplo2
Como arriba, para el ejemplo, solo colocamos una función en cada archivo, pero en realidad puedes colocar muchas funciones. También puedes definir clases de Python en estos archivos y luego crear un paquete para esas clases.
Otras extensiones