2016-05-13 11 views
0

Das Tutorial (Absatz 4, https://docs.python.org/3/tutorial/modules.html#importing-from-a-package) erwähnt:wie import * und __all__ Arbeit mit Submodule Importen

Es enthält auch alle Submodule des Pakets, das explizit geladen von früheren Import-Anweisungen waren. Betrachten Sie diesen Code:

import sound.effects.echo 
import sound.effects.surround 
from sound.effects import * 

In diesem Beispiel ist die Echos-und Surround-Module ist im aktuellen Namensraum importiert, da sie in der sound.effects Paket definiert werden, wenn die von ... Import-Anweisung wird ausgeführt. (Dies funktioniert auch, wenn __all__ definiert ist.)

Unsicher:

  1. In der ersten Anweisung, die previous import statements ist es unter Bezugnahme auf?
  2. ich die Anweisungen nicht verstehen kann und das Beispiel. Um from sound.effects import * sollte nichts importieren, es sei denn in __all__ von __init__.py im Paket definiert.
+0

„Wenn' ‚__all__‘ 'nicht definiert ist, die Anweisung von' sound.effects importieren * 'importiert nicht alle Submodule aus dem Paket sound.effects in den aktuellen Namensraum, sondern stellt nur sicher, dass das Paket' sound.effects 'wurde importiert (möglicherweise wird irgendein Initialisierungscode in'__init __. py' ausgeführt) und importiert dann die Namen, die im Paket definiert sind." Es heißt es in Ihrem Link – Natecat

+0

@ Natecat können Sie bitte die zweite erwähnte Anweisung erklären. Was bedeutet 'weil sie im sound.effects-Paket definiert sind '? –

Antwort

1
  1. previous import statements bezieht sich auf:

    import sound.effects.echo 
    import sound.effects.surround 
    
  2. Nach CPython 3.6 from sound.effects import * nur in __init__.py geladen import Submodule (durch __all__ definiert wurden). Das heißt, Sie keine Symbole in echo verwenden können und surround wenn __all__ nicht definiert ist. Ansonsten

,

Es enthält auch alle Submodule des Pakets, das von früheren Import-Anweisungen explizit geladen wurden.

funktioniert nur, wenn __all__ definiert in sound.effects ‚s __init__.py wie __all__ = ["echo", "surround", "reverse"].