English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Spiegazione dettagliata del ruolo del file __init__.py in Python

__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 *

In questo caso, i moduli e i pacchetti registrati nella lista __all__ del file __init__.py verranno importati nel file corrente.

Si può sapere che __init__.py controlla principalmente il comportamento dell'importazione dei pacchetti. Per capire chiaramente il ruolo del file __init__.py, è necessario conoscere in dettaglio il meccanismo di riferimento dell'istruzione import:

Gli oggetti che possono essere importati con l'istruzione import sono dei seguenti tipi:

•File di modulo (.py file)

•Estensioni C o C++ (compilate come libreria condivisa o file DLL)

•Pacchetti (contengono più moduli)

•Moduli integrati (scritti in C e linkati all'interprete Python)

L'interprete cerca i file di importazione in ordine di directory elencate nella lista sys.path quando si importano moduli.

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.zip', 'C:\\Documents and Settings\\weizhong', 'C:\\Python34\\DLLs', 'C:\\Python34\\lib', 'C:\\Python34\\lib\\plat-win', 'C:\\Python34\\lib\\lib-tk', 'C:\\Python34\\Lib\\site-packages\\pythonwin', 'C:\\Python34', 'C:\\Python34\\lib\\site-packages', 'C:\\Python34\\lib\\site-packages\\win32', 'C:\\Python34\\lib\\site-packages\\win32\\lib', 'C:\\Python34\\lib\\site-packages\\wx-2.6-msw-unicode']

In cui il primo elemento della lista è una stringa vuota, rappresenta la directory corrente.

Riguardo ai file .pyc e .pyo

L'assemblaggio dei file .py avviene solo quando viene eseguita l'istruzione import, quando il file .py viene importato per la prima volta, viene assemblato in bytecode e il bytecode viene scritto nel file .pyc omonimo. Successive operazioni di importazione eseguiranno direttamente il file .pyc (quando il file .py viene modificato, viene generato un nuovo file .pyc), quando l'interprete utilizza l'opzione -O, utilizzerà il file .pyo omonimo, che rimuove l'assert, il numero di riga e altre informazioni di debug, è più piccolo e più veloce. (Utilizzando l'opzione -OO, il file .pyo generato ignorerà anche le informazioni di documentazione)

Importare il modulo

I moduli sono solitamente file.py singoli, che possono essere direttamente richiamati con import, i tipi di file che possono essere utilizzati come moduli includono .py, .pyo, .pyc, .pyd, .so, .dll

Quando si importa un modulo, l'interprete esegue le seguenti operazioni:

1. Crea un nuovo namespace per il nome del modulo importato, tramite il quale puoi accedere alle proprietà e ai metodi del modulo importato.

2. Esegui il file di sorgente nel nuovo namespace creato.

3. Crea un oggetto chiamato file di sorgente che fa riferimento al namespace del modulo, in modo che puoi accedere alle funzioni e alle variabili del modulo tramite questo oggetto.

Le istruzioni import possono essere utilizzate in qualsiasi posizione del programma, puoi importare lo stesso modulo più volte nel tuo programma, ma il codice del modulo viene eseguito solo quando il modulo viene importato per la prima volta. Le istruzioni import successive creano semplicemente un riferimento al namespace del modulo.

Il dizionario sys.modules contiene la mappatura tra il nome del modulo e l'oggetto modulo di tutti i moduli importati.

Importazione del pacchetto

Più moduli correlati formano un pacchetto, rendendo più facile la manutenzione e l'uso, e riducendo al minimo i conflitti di namespace. Di solito, la struttura del pacchetto può essere come segue:

package
|- subpackage1
|- __init__.py
|- a.py
|- subpackage2
|- __init__.py
|- b.py

Ci sono diversi modi di importare:

import subpackage1.a # Importa il modulo subpackage.a nel namespace globale, ad esempio, quando si accede all'attributo a si utilizza subpackage1.a.attr
from subpackage1 import a # Importa il modulo a nel namespace globale, ad esempio, quando si accede all'attributo a si utilizza a.attr_a
from subpackage.a import attr_a # Importa direttamente l'attributo del modulo a nel namespace, ad esempio, quando si accede all'attributo a si utilizza attr_a 
L'istruzione from può importare direttamente il modulo nel namespace corrente, l'istruzione from non cita il namespace dell'oggetto importato, ma introduce direttamente l'oggetto importato nel namespace corrente.

L'editor ha spiegato in dettaglio l'azione del file __init__.py in Python, sperando che sia utile a tutti. Se avete qualsiasi domanda, lasciate un commento e l'editor risponderà prontamente. Ringraziamo anche il supporto del sito web tutorial yana per tutti voi!

Dichiarazione: il contenuto di questo articolo è stato prelevato da Internet, è di proprietà del rispettivo autore, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene i diritti di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale. Se trovi contenuti sospetti di violazione del copyright, invia una email a: notice#oldtoolbag.com (al momento dell'invio della email, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata la veridicità, questo sito eliminerà immediatamente i contenuti sospetti di violazione del copyright.

Ti potrebbe interessare