Tôi đã ngạc nhiên khi không thấy số chi phí thực tế cho các kiểm tra tải lặp đi lặp lại đã được đăng, mặc dù có nhiều giải thích tốt về những gì mong đợi.
Nếu bạn nhập ở trên cùng, bạn thực hiện tải trọng bất kể điều gì. Điều đó khá nhỏ, nhưng thường là trong một phần nghìn giây, không phải là nano giây.
Nếu bạn nhập trong (các) chức năng, thì bạn chỉ thực hiện lần truy cập để tải nếu và khi một trong các chức năng đó được gọi lần đầu tiên. Như nhiều người đã chỉ ra, nếu điều đó hoàn toàn không xảy ra, bạn sẽ tiết kiệm được thời gian tải. Nhưng nếu (các) hàm được gọi rất nhiều, bạn thực hiện một lần nhấn mặc dù nhỏ hơn nhiều (để kiểm tra xem nó đã được tải chưa, không thực sự tải lại). Mặt khác, như @aaronasterling chỉ ra rằng bạn cũng tiết kiệm được một chút vì nhập trong hàm cho phép hàm sử dụng tra cứu biến cục bộ nhanh hơn một chút để xác định tên sau ( http://stackoverflow.com/questions/477096/python- nhập mã hóa-phong cách / 4789963 # 4789963 ).
Dưới đây là kết quả của một thử nghiệm đơn giản, nhập một vài thứ từ bên trong hàm. Thời gian được báo cáo (trong Python 2.7,14 trên Intel Core i7 2,3 GHz) được hiển thị bên dưới (cuộc gọi thứ 2 thực hiện nhiều hơn các cuộc gọi sau có vẻ phù hợp, mặc dù tôi không biết tại sao).
0 foo: 14429.0924 µs
1 foo: 63.8962 µs
2 foo: 10.0136 µs
3 foo: 7.1526 µs
4 foo: 7.8678 µs
0 bar: 9.0599 µs
1 bar: 6.9141 µs
2 bar: 7.1526 µs
3 bar: 7.8678 µs
4 bar: 7.1526 µs
Mật mã:
from __future__ import print_function
from time import time
def foo():
import collections
import re
import string
import math
import subprocess
return
def bar():
import collections
import re
import string
import math
import subprocess
return
t0 = time()
for i in xrange(5):
foo()
t1 = time()
print(" %2d foo: %12.4f \xC2\xB5s" % (i, (t1-t0)*1E6))
t0 = t1
for i in xrange(5):
bar()
t1 = time()
print(" %2d bar: %12.4f \xC2\xB5s" % (i, (t1-t0)*1E6))
t0 = t1