मैं पहले से ही पोस्ट किए गए बार-बार लोड-चेक के लिए वास्तविक लागत संख्या नहीं देखकर आश्चर्यचकित था, हालांकि उम्मीद करने के लिए कई अच्छे स्पष्टीकरण हैं।
यदि आप शीर्ष पर आयात करते हैं, तो आप लोड को हिट करते हैं, इससे कोई फर्क नहीं पड़ता। यह बहुत छोटा है, लेकिन आमतौर पर मिलीसेकंड में, नैनोसेकंड में नहीं।
यदि आप किसी फ़ंक्शन के भीतर आयात करते हैं, तो आप केवल लोड करने के लिए हिट लेते हैं अगर और जब उन कार्यों में से एक को पहले कहा जाता है। जैसा कि कई ने बताया है, यदि ऐसा बिल्कुल नहीं होता है, तो आप लोड समय बचाते हैं। लेकिन यदि फ़ंक्शन (एस) को बहुत अधिक कहा जाता है, तो आप एक दोहराया हालांकि बहुत छोटी हिट लेते हैं (यह जांचने के लिए कि यह लोड किया गया है, वास्तव में फिर से लोड करने के लिए नहीं)। दूसरी ओर, जैसा कि @aronasterling ने बताया कि आप थोड़ी बचत भी करते हैं क्योंकि एक फंक्शन में इंपोर्ट करने से फंक्शन को नाम की पहचान करने के लिए थोड़ी तेज़ी से लोकल वेरिएबल लुक्स का इस्तेमाल करना पड़ता है ( http://stackoverflow.com/questions/477096/python) आयात-कोडिंग-शैली / 4789963 # 4789963 )।
यहां एक साधारण परीक्षण के परिणाम हैं जो एक फ़ंक्शन के अंदर से कुछ चीजें आयात करते हैं। सूचित किया गया समय (एक 2.3 गीगाहर्ट्ज इंटेल कोर i7 पर पायथन 2.7.14 में) नीचे दिखाया गया है (बाद में कॉल करने से अधिक ले रहे 2 कॉल सुसंगत लगते हैं, हालांकि मुझे नहीं पता क्यों)।
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
कोड:
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