Làm gì a. trong một câu lệnh nhập khẩu trong Python có nghĩa là gì?


140

Tôi đang xem mã cho multiprocessingmô-đun của Python và nó chứa dòng này:

from ._multiprocessing import win32, Connection, PipeConnection

thay vì

from _multiprocessing import win32, Connection, PipeConnection

sự khác biệt tinh tế là thời kỳ trước _multiprocessing. Điều đó nghĩa là gì? Tại sao thời kỳ?


3
Nó được gọi là tương đối nhập khẩu: docs.python.org/tutorial/modules.html
Aillyn

Nếu không có ., nếu bạn có một tệp _multiprocessing.pycho một số lý do không thể mã hóa bên cạnh tập lệnh chính của bạn, multiprocessingsẽ bị hỏng. Với ., nó đảm bảo nó có mô-đun riêng.
Chris Morgan

Nếu một .tham chiếu đến các mô-đun ngang hàng, tại sao tài liệu lại nói sẽ sử dụng .mô-đun đa xử lý đó khi đó là một phần của các thư viện sys.path thông thường? Có phải câu hỏi và sự làm rõ của Chris trộn lẫn chúng hay tôi không hiểu? Đánh giá cao sự giúp đỡ.
rfii

Câu trả lời:


120

Đó là cú pháp mới cho nhập khẩu tương đối rõ ràng . Nó có nghĩa là nhập khẩu từ gói hiện tại.


26
Cái gì định nghĩa "gói hiện tại" là gì?
fraxture

7
Nó sẽ nói từ nơi gói nhập khẩu . Về cơ bản nó có nghĩa là không gian tên hiện tại hoặc thư mục gói.
Keith

2
Cảm ơn, tôi nghĩ tôi biết ý của bạn. Chỉ cần rõ ràng, bạn sẽ nhớ cung cấp một ví dụ?
fraxture

10
Bạn có thể làm những việc như:from . import peermodule from .. import parentpackagemodule
Keith

1
@bmc Một cách tốt để học là thiết lập một thử nghiệm nhỏ và tự mình thử. ;-)
Keith

22

Dấu chấm trong tên mô-đun được sử dụng để nhập mô-đun tương đối (xem tại đâyđây , mục 6.4.2).

Bạn có thể sử dụng nhiều hơn một dấu chấm, không đề cập đến gói curent mà là (các) cha mẹ của nó. Điều này chỉ nên được sử dụng trong các gói, trong mô-đun chính người ta phải luôn luôn sử dụng tên mô-đun tuyệt đối.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.