Co robi. w instrukcji importu w Pythonie oznacza?


141

Przeglądam kod multiprocessingmodułu Pythona i zawiera on następujący wiersz:

from ._multiprocessing import win32, Connection, PipeConnection

zamiast

from _multiprocessing import win32, Connection, PipeConnection

subtelna różnica dotyczy okresu poprzedniego _multiprocessing. Co to znaczy? Dlaczego ten okres?


3
Nazywa się to importem względnym: docs.python.org/tutorial/modules.html
Aillyn

Bez tego ., gdybyś miał plik _multiprocessing.pyz jakiegoś nieczytelnego powodu obok głównego skryptu, multiprocessingzepsułoby się. Dzięki .temu zapewnia, że ​​otrzymuje własny moduł.
Chris Morgan,

Jeśli a .odnosi się do modułów równorzędnych, dlaczego w dokumentacji miałoby być napisane, aby używać a, .skoro ten moduł wieloprocesorowy powinien być częścią zwykłych bibliotek sys.path? Czy pytanie i wyjaśnienie Chrisa mylą je, czy też nie rozumiem? Doceń pomoc.
rfii

Odpowiedzi:


120

To jest nowa składnia dla jawnych importów względnych . Oznacza to import z aktualnego pakietu.


26
Co definiuje, czym jest „obecny pakiet”?
fraxture

7
Powinien powiedzieć, skąd jest pakiet importujący . Zasadniczo oznacza bieżącą przestrzeń nazw lub katalog pakietu.
Keith,

2
Dzięki, myślę, że wiem, co masz na myśli. Dla jasności, czy mógłbyś podać przykład?
fraxture

11
Możesz na przykład:from . import peermodule from .. import parentpackagemodule
Keith

2
@bmc Dobrym sposobem na naukę jest skonfigurowanie małego eksperymentu i samodzielne wypróbowanie. ;-)
Keith

22

Kropka w nazwie modułu służy do względnego importu modułu (patrz tutaj i tutaj , sekcja 6.4.2).

Możesz użyć więcej niż jednej kropki, odnosząc się nie do aktualnego pakietu, ale do jego rodzica (ów). Powinno to być używane tylko w pakietach, w głównym module należy zawsze używać bezwzględnych nazw modułów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.