2011-07-20 41 views
22

Tôi đang nhập khẩu rất nhiều các chức năng từ một modulenhập khẩu nhiều chức năng từ một mô-đun Python

Là nó tốt hơn để sử dụng

from my_module import function1, function2, function3, function4, function5, function6, function7 

đó là một chút lộn xộn, nhưng tránh ngập không gian tên hiện tại với tất cả mọi thứ từ mô-đun đó hoặc

from my_module import * 

Trông gọn gàng nhưng sẽ lấp đầy không gian tên với mọi thứ từ mô-đun đó.

Không thể tìm thấy bất kỳ điều gì trong PEP8 về giới hạn số lượng bạn nên nhập theo tên. Đó là tốt hơn và tại sao?

Trả lời

29

Nếu bạn thực sự cần nhiều chức năng, bạn đã gây ô nhiễm không gian tên của mình.

tôi sẽ đề nghị:

import my_module 

Hoặc, nếu my_module có một cái tên dài sử dụng một bí danh:

import my_long_module as m 
-2

tôi đề nghị bạn giải quyết vấn đề bằng cách phân chia mô-đun của bạn bằng cách nhóm các chức năng một cách thích hợp và đưa vào các mô-đun riêng biệt.

Phương pháp bí danh của Kugel cũng tốt - mặc dù tôi sẽ không khuyến khích sử dụng bí danh như "m". : O)

9

Nếu đó là giữa một hay khác, sử dụng

from my_module import function1, function2, function3, function4, function5, function6, function7 

Xem "Rõ ràng là tốt hơn tiềm ẩn." trong import this.

Nếu bạn chỉ muốn một tên ngắn hơn my_module.function1, luôn có import my_module as mod.

Đối với vài chức năng bạn sử dụng nhiều lần (một trong hai loại nhiều lần, do đó bạn muốn có một tên viết tắt hoặc trong một vòng lặp nên tốc độ truy cập là rất quan trọng), có

func1 = my_module.function1 
4

Với một chút quản lý bạn có thể kiểm soát nhập khẩu * nhập khẩu. Giả sử my_module của bạn có hàm1..function8 nhưng bạn chỉ muốn thực hiện các hàm từ 1 đến 6. Trong my_module của bạn, phân công lại các __all__ thuộc tính:

my_module.py:

__all__ = ['function1', 'function2', 'function3' ...] 

def function1(): 
    ... 

# etc... 

Bây giờ nếu bạn sử dụng from my_module import *, bạn sẽ chỉ nhập khẩu những chức năng và biến bạn định nghĩa trong __all__ thuộc tính từ my_module. py.

+0

Điều gì sẽ xảy ra nếu mô-đun là một số mô-đun sẵn có hoặc bên thứ ba mà bạn không thể hoặc không muốn chỉnh sửa? –

+0

Sau đó, bạn có thể không thể/không nên làm điều này. Tôi giả định bởi tên tập tin đó là một cái gì đó anh ta tạo ra. –

+0

@MannyD - đó là chính xác, tuy nhiên ở những nơi khác trong mã của tôi, tôi cần nhập hàm9..functionN –

Các vấn đề liên quan