Nếu có một thư viện mà tôi sẽ sử dụng cho ít nhất hai phương pháp, thì có sự khác biệt nào về hiệu suất hoặc mức sử dụng bộ nhớ giữa các phương pháp sau không?
từ X nhập phương pháp 1, phương pháp 2
Và
nhập khẩu X
Có một sự khác biệt, bởi vì nhập khẩu x
Có hai cách tra cứu tên trong phiên bản này: một cho tên mô-đun và một cho tên hàm; mặt khác, sử dụng từ x nhập y
, bạn chỉ có một lần tra cứu.
Bạn có thể thấy rõ nhất điều này bằng cách sử dụng mô-đun dis:
nhập khẩu ngẫu nhiên
định nghĩa f_1():
random.seed()
dis.dis(f_1)
0 LOAD_GLOBAL 0 (ngẫu nhiên)
3 LOAD_ATTR 0 (hạt giống)
6 CHỨC_NĂNG_GỌI 0
9 POP_TOP
10 LOAD_CONST 0 (Không có)
13 GIÁ TRỊ TRẢ VỀ
từ hạt giống nhập khẩu ngẫu nhiên
định nghĩa f_2():
hạt giống()
dis.dis(f_2)
0 LOAD_GLOBAL 0 (hạt giống)
3 CHỨC_NĂNG_GỌI 0
6 POP_TOP
7 LOAD_CONST 0 (Không có)
10 GIÁ TRỊ TRẢ VỀ
Như bạn có thể thấy, sử dụng từ x nhập y
Biểu mẫu này sẽ nhanh hơn.
Mặt khác,nhập khẩu x
So sánh từ x nhập y
Rẻ hơn vì ít phải tra cứu tên hơn; chúng ta hãy xem mã đã dịch ngược:
định nghĩa f_3():
nhập khẩu ngẫu nhiên
dis.dis(f_3)
0 TẢI_CONST 1 (-1)
3 LOAD_CONST 0 (Không có)
6 IMPORT_NAME 0 (ngẫu nhiên)
9 STORE_FAST 0 (ngẫu nhiên)
12 LOAD_CONST 0 (Không có)
15 GIÁ TRỊ TRẢ VỀ
định nghĩa f_4():
từ hạt giống nhập khẩu ngẫu nhiên
dis.dis(f_4)
0 TẢI_CONST 1 (-1)
3 LOAD_CONST 2 (('hạt giống',))
6 IMPORT_NAME 0 (ngẫu nhiên)
9 IMPORT_FROM 1 (hạt giống)
12 STORE_FAST 0 (hạt giống)
15 POP_TOP
16 LOAD_CONST 0 (Không có)
19 GIÁ TRỊ TRẢ VỀ
Tôi không biết tại sao nhưng có vẻ như từ x nhập y
trông giống như một lệnh gọi hàm và do đó tốn kém hơn dự kiến; do đó, nếu hàm được nhập chỉ được sử dụng một lần, điều đó có nghĩa là sử dụng nhập khẩu x
sẽ nhanh hơn và nếu sử dụng nhiều lần, hãy sử dụng sẽ nhanh hơn khi nhập y từ x
.
Nói như vậy, như mọi khi, tôi khuyên bạn nênkhông muốnĐưa ra quyết định về cách nhập các mô-đun và chức năng dựa trên kiến thức này vì đây chỉ là một số tối ưu hóa vội vàng.
Cá nhân tôi nghĩ rằng không gian tên rõ ràng dễ đọc hơn trong nhiều trường hợp và tôi khuyên bạn cũng nên làm như vậy: sử dụng tính thẩm mỹ của riêng bạn :-)
Tôi là một lập trình viên xuất sắc, rất giỏi!