English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
__init__.py 文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py 文件。
通常__init__.py 文件为空,但是我们还可以为它增加其他的功能。我们在导入一个包时,实际上是导入了它的__init__.py文件。这样我们可以在__init__.py文件中批量导入我们所需要的模块,而不再需要一个一个的导入。
# package # __init__.py import re import urllib import sys import os # a.py import package print(package.re, package.urllib, package.sys, package.os)
注意这里访问__init__.py文件中的引用文件,需要加上包名。
__init__.py中还有一个重要的变量,__all__,它用来将模块全部导入。
# __init__.py __all__ = ['os', 'sys', 're', 'urllib'] # a.py from package import *
这时就会把注册在__init__.py文件中__all__列表中的模块和包导入到当前文件中来。
可以了解到,__init__.py主要控制包的导入行为。要想清楚理解__init__.py文件的作用,还需要详细了解一下import语句引用机制:
可以被import语句导入的对象是以下类型:
•模块文件(.py文件)
•C o C++;扩展(已编译为共享库或DLL文件)
•包(包含多个模块)
•内建模块(使用C编写并已链接到Python解释器中)
当导入模块时,解释器按照sys.path列表中的目录顺序来查找导入文件。
import sys >>> print(sys.path) # Linux: ['', '']/usr/local/lib/python3.4', '/usr/local/lib/python3.4/plat-sunos5', '/usr/local/lib/python3.4/lib-tk', '/usr/local/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/site-packages' # Windows: ['', 'C:\\WINDOWS\\system32\\python34.zip34\\DLLs34\\lib', 'C:\\Python34\\lib\\plat-win', 'C:\\Python34\\lib\\lib-tk', 'C:\\Python34\\Lib\\site-packages\\pythonwin', 'C:\\Python34', 'C:\\Python34\\lib\\site-packages34\\lib\\site-packages\\win32', 'C:\\Python34\\lib\\site-packages\\win32\\lib', 'C:\\Python34\\lib\\site-packages\\wx-2.6-msw-unicode'
Donde el primer elemento de la lista es una cadena vacía, representa el directorio actual.
Sobre los archivos.pyc y .pyo
.La asamblea del archivo.py, solo se realiza cuando se ejecuta la declaración import, cuando el archivo.py se importa por primera vez, se compila a código de bytes y se escribe en el archivo.pyc homónimo. En operaciones posteriores de importación, se ejecutará directamente el archivo.pyc (cuando cambia la fecha de modificación del archivo.py, se generará un nuevo archivo.pyc), cuando el intérprete utiliza-Con la opción O, se utilizará el archivo.pyo con el mismo nombre, este archivo elimina las afirmaciones (assert), las líneas de descompilación y otra información de depuración, tiene un tamaño más pequeño y ejecuta más rápido. (Usar-La opción OO, el archivo.pyo generado ignora la información de documentación)
Importar módulo
Los módulos suelen ser archivos.py individuales y se pueden referir directamente con import, los tipos de archivos que pueden ser usados como módulos incluyen.py, .pyo, .pyc, .pyd, .so, .dll
Al importar un módulo, el intérprete realiza lo siguiente:
1.Crear un nuevo espacio de nombres con el nombre del módulo importado y, a través de este espacio de nombres, se puede acceder a las propiedades y métodos del módulo importado.
2.Ejecutar el archivo de código fuente en el nuevo espacio de nombres creado.
3.Crear un objeto de archivo de código fuente denominado, que hace referencia al espacio de nombres del módulo, de modo que se pueda acceder a las funciones y variables del módulo a través de este objeto.
La declaración import puede utilizarse en cualquier lugar del programa, puede importar el mismo módulo varias veces en el programa, pero el código del módulo solo se ejecuta cuando el módulo se importa por primera vez. Las declaraciones import posteriores solo crean una referencia al espacio de nombres del módulo.
El diccionario sys.modules del módulo sys almacena el mapeo de nombres de módulos a objetos de módulo de todos los módulos importados.
Importar paquete
Múltiples módulos relacionados se organizan en un paquete para facilitar su mantenimiento y uso, al mismo tiempo, pueden evitar conflictos de espacio de nombres en cierta medida. Por lo general, la estructura del paquete puede ser así:
paquete |- subpackage1 |- __init__.py |- a.py |- subpackage2 |- __init__.py |- b.py
Hay varios métodos de importación:
import subpackage1.a # Importa el módulo subpackage.a al espacio de nombres global, por ejemplo, al acceder a las propiedades de a, se utiliza subpackage1.a.attr from subpackage1 import a # Importa el módulo a al espacio de nombres global, por ejemplo, al acceder a las propiedades de a, se utiliza a.attr_a from subpackage.a import attr_a # Importa directamente las propiedades del módulo a al espacio de nombres, por ejemplo, al acceder a las propiedades de a, se utiliza attr_a Puede usar la declaración from para importar módulos directamente al espacio de nombres actual, la declaración from no cita el espacio de nombres del objeto importado, sino que introduce directamente el objeto importado en el espacio de nombres actual.
El siguiente es un análisis detallado del archivo __init__.py en Python que el editor les ha presentado a ustedes, esperamos que les sea útil. Si tienen alguna pregunta, déjenos un mensaje y el editor les responderá a tiempo. También agradecemos enormemente el apoyo de todos a la página web de tutorial de clamor!
Declaración: Este artículo se ha redactado en línea, el derecho de autor pertenece al propietario original, el contenido se ha contribuido y cargado por los usuarios de Internet, este sitio web no posee los derechos de propiedad, no se ha realizado procesamiento editorial humano y no asume responsabilidades legales relacionadas. Si encuentra contenido sospechoso de violación de derechos de autor, por favor envíe un correo electrónico a: notice#w.3Declaración: El contenido de este artículo se obtiene de la red, el derecho de autor pertenece al propietario original, el contenido se contribuye y carga espontáneamente por los usuarios de Internet, este sitio web no posee los derechos de propiedad, no se ha realizado procesamiento editorial humano y no asume responsabilidades legales relacionadas. Si encuentra contenido sospechoso de violación de derechos de autor, por favor envíe un correo electrónico a: notice#w proporcionando evidencia relevante, una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de violación de derechos de autor.