Nhập khẩu mô-đun không lãng phí bất cứ điều gì ; mô-đun luôn được nhập đầy đủ (vào sys.modulesánh xạ), do đó, khi bạn sử dụng import syshoặc from sys import argvkhông có tỷ lệ cược.
Sự khác biệt duy nhất giữa hai câu lệnh là tên nào bị ràng buộc; import sysliên kết tên sysvới mô-đun (so sys-> sys.modules['sys']), trong khi from sys import argvliên kết một tên khác argv, chỉ thẳng vào thuộc tính có trong mô-đun (vì vậy argv-> sys.modules['sys'].argv). Phần còn lại của sysmô-đun vẫn còn đó, cho dù bạn có sử dụng bất cứ thứ gì khác từ mô-đun hay không.
Cũng không có sự khác biệt hiệu suất giữa hai phương pháp. Vâng, sys.argvphải tìm kiếm hai điều; nó phải tra cứu systrong không gian tên toàn cầu của bạn (tìm mô-đun), sau đó tra cứu thuộc tính argv. Và có, bằng cách sử dụng, from sys import argvbạn có thể bỏ qua việc tra cứu thuộc tính, vì bạn đã có một tham chiếu trực tiếp đến thuộc tính. Nhưng importcâu lệnh vẫn phải thực hiện công việc đó, nó tìm kiếm thuộc tính tương tự khi nhập và bạn sẽ chỉ cần sử dụng argv một lần . Nếu bạn phải sử dụng argvhàng ngàn lần trong một vòng lặp thì có lẽ điều đó có thể tạo ra sự khác biệt, nhưng trong trường hợp cụ thể này thì thực sự không phải vậy.
Thay vào đó, sự lựa chọn giữa cái này hay cái khác, nên dựa trên phong cách mã hóa .
Trong một mô-đun lớn , tôi chắc chắn sẽ sử dụng import sys; mã tài liệu quan trọng, và sử dụng sys.argvmột nơi nào đó trong một mô-đun lớn làm cho nó rõ ràng hơn những gì bạn đang đề cập đến hơn argvbao giờ hết.
Nếu nơi duy nhất bạn sử dụng argvlà trong một '__main__'khối để gọi một main()hàm, bằng mọi cách, hãy sử dụng from sys import argvnếu bạn cảm thấy hạnh phúc hơn về điều đó:
if __name__ == '__main__':
from sys import argv
main(argv)
Tôi vẫn sẽ sử dụng import sysở đó một mình. Tất cả mọi thứ đều bình đẳng (và chính xác là về hiệu suất và số lượng ký tự được sử dụng để viết nó), điều đó dễ dàng hơn đối với tôi.
Nếu bạn đang nhập một cái gì đó khác hoàn toàn, thì có lẽ hiệu suất sẽ phát huy tác dụng. Nhưng chỉ khi bạn sử dụng một tên cụ thể trong một mô-đun nhiều lần , trong một vòng lặp quan trọng chẳng hạn. Nhưng sau đó, việc tạo một tên cục bộ (trong một hàm) sẽ nhanh hơn:
import somemodule
def somefunction():
localname = somemodule.somefunctionorother
while test:
# huge, critical loop
foo = localname(bar)