Apa a. dalam pernyataan import dengan Python?

150

Saya melihat kode untuk multiprocessingmodul Python , dan berisi baris ini:

from ._multiprocessing import win32, Connection, PipeConnection

dari pada

from _multiprocessing import win32, Connection, PipeConnection

perbedaan halus adalah periode sebelumnya _multiprocessing. Apa artinya? Mengapa periode itu?

Vlad the Impala
sumber
3
Ini disebut impor relatif: docs.python.org/tutorial/modules.html
Aillyn
Tanpa itu ., jika Anda memiliki file _multiprocessing.pykarena alasan yang tidak terbaca di samping skrip utama Anda, multiprocessingakan rusak. Dengan ., itu memastikan itu mendapatkan modulnya sendiri.
Chris Morgan
Jika .mereferensikan modul peer, mengapa dokumentasi mengatakan untuk menggunakan .ketika modul multiprocessing itu harus menjadi bagian dari pustaka sys.path biasa? Apakah pertanyaan dan klarifikasi Chris bercampur aduk atau saya tidak mengerti? Hargai bantuannya.
rfii

Jawaban:

127

Itu adalah sintaks baru untuk impor relatif eksplisit . Itu berarti impor dari paket saat ini.

Keith
sumber
30
Apa yang mendefinisikan "paket saat ini"?
mulai
7
Ini harus mengatakan dari mana paket impor itu . Ini pada dasarnya berarti namespace atau direktori paket saat ini.
Keith
2
Terima kasih, saya rasa saya tahu apa yang Anda maksud. Untuk memperjelas, maukah Anda memberikan contoh?
fraxture
11
Anda dapat melakukan hal-hal seperti:from . import peermodule from .. import parentpackagemodule
Keith
3
@bmc Cara yang baik untuk belajar adalah dengan melakukan sedikit percobaan dan mencobanya sendiri. ;-)
Keith
23

Titik di nama modul digunakan untuk impor modul relatif (lihat di sini dan di sini , bagian 6.4.2).

Anda dapat menggunakan lebih dari satu titik, tidak mengacu pada paket saat ini tetapi pada induknya. Ini hanya boleh digunakan di dalam paket, di modul utama seseorang harus selalu menggunakan nama modul absolut.

Martin Gunia
sumber