Conosco queste due domande sui file __init__.py
e __main__.py
.Qual è la differenza tra __init__.py e __main__.py?
Ma io non capisco la differenza tra loro.
Conosco queste due domande sui file __init__.py
e __main__.py
.Qual è la differenza tra __init__.py e __main__.py?
Ma io non capisco la differenza tra loro.
__init__.py viene eseguito quando si importano un pacchetto in un programma in esecuzione pitone. Ad esempio, import idlelib
all'interno di un programma, viene eseguito idlelib/__init__.py
, che non fa nulla in quanto il suo unico scopo è quello di contrassegnare la directory idlelib come un pacchetto. D'altra parte, tkinter/__init__.py
contiene la maggior parte del codice tkinter e definisce tutte le classi del widget.
__main__.py è gestito come '__main__' quando si corsa un pacchetto come il programma principale. Ad esempio, python -m idlelib
su una riga di comando viene eseguito idlelib/__main__.py
, che avvia inattiva. Analogamente, python -m tkinter
corre tkinter/__main__.py
, che ha questa linea:
from . import _test as main
In questo contesto, è .
tkinter
, quindi importando .
importazioni tkinter
, che corre tkinter/__init__.py
. _test
è una funzione definita all'interno di quel file. Quindi chiamare main()
(riga successiva) ha lo stesso effetto di eseguire python -m tkinter.__init__
nella riga di comando.
Suggerimento di Markdown per riferimento futuro: utilizzare una escape backslash durante la scrittura di '\ __ init __. Py' e simili per impedire a Markdown di farlo semplicemente in grassetto. –
Perché 'tkinter' ha un sacco di codice nel file' __init __. Py' mentre 'idlelib' non ha il codice lì? C'è una ragione per cui a volte vorresti avere il codice in '__init __. Py? Ma altre volte no? – HelloGoodbye
Il codice in 'package/__ init __. Py' fa in modo che il' pacchetto di importazione 'faccia qualcosa. Prima della 3.0, 'Tkinter' era un modulo, non un pacchetto. Nella 3.0, il codice in 'Tkinter.py' è stato inserito in' tkinter/__ init__.py, quindi l'unica modifica necessaria era 'import tkinter' invece di' import Tkinter'. –
__init__.py
, tra le altre cose, etichetta una directory come una directory python e consente di impostare variabili a livello di pacchetto.
__main__.py
, tra le altre cose, viene eseguito se si tenta di eseguire un gruppo compresso di file python. __main__.py
consente di eseguire i pacchetti.
Entrambe queste risposte sono state ottenute dalle risposte collegate. C'è qualcos'altro che non hai capito di queste cose?
Le risposte alle due domande collegate sono completamente diverse. Qual è il tuo punto di confusione? –