जवाबों:
यह उपयोगी हो सकता है यदि आप एक अनाम लैम्बडा फ़ंक्शन में सिर्फ एक बार एक मॉड्यूल का उपयोग करना चाहते हैं, क्योंकि यह आपको एक अलग लिखने से बचने की अनुमति देता है:
lambda x:__import__('SomeModule').foo(x,123)
एक बाइट से छोटा है
from SomeModule import*;f=lambda x:foo(x,123)
यदि कोड एक नामित फ़ंक्शन या प्रोग्राम है, तो __import__
सबसे चरम या आकस्मिक परिस्थितियों को छोड़कर मदद करने की संभावना नहीं है।
import
होगा जब किसी इंडेंटेड ब्लॉक को अंदर बुलाया जाएगा? शायद ऩही।
f=
क्योंकि अनाम फ़ंक्शन की अनुमति है और फ़ंक्शन के बाहर सामग्री हो सकती है ।
पर्याप्त रूप से लंबे नामों के साथ कई मॉड्यूल आयात करते समय, इसे असाइन करने में मदद मिल सकती है __import__
फ़ंक्शन को एक छोटे चर में करने और आयात के लिए इसका उपयोग करने में मदद मिल सकती है
नियमित आयात विवरण - 97 बाइट्स
itertools आयात से * डाइमटाइम आयात से * प्रिंट सूची (क्रमपरिवर्तन) ("एबीसी") प्रिंट डेटाइम.वन ()
असाइन __import__
करने के लिए i
- 94 बाइट्स:
i = __ import__ प्रिंट सूची (i ("itertools")। क्रमपरिवर्तन ("abc")) प्रिंट I ("डेटाटाइम")। datetime.now ()
__import__("x").doSomething()
लंबाई x के नाम के साथ मॉड्यूल को संदर्भित करने के लिए 15+ x वर्णों की आवश्यकता है ।
import x\nx.doSomething()
9 + 2 * x अक्षर चाहिए। ये कार्य एक्स = 6 पर ओवरलैप करते हैं , इसलिए इस तरह की तुलना में लंबे नाम के साथ किसी भी मॉड्यूल का उपयोग करना बेहतर है __import__
, सामान्य कीमतों से कुछ भी कम लाभ:
हालांकि, from x import*\ndoSomething()
केवल 14+ x वर्णों की आवश्यकता है , इसलिए सामान्य आयात की तुलना में यह इसके लायक नहीं है जब तक कि मॉड्यूल का नाम 5 वर्णों से अधिक लंबा न हो:
यह सब मानता है कि आप एक फ़ंक्शन / वर्ग / जो भी केवल एक बार का उल्लेख कर रहे हैं। यदि आप इसे एक से अधिक बार संदर्भित करते हैं, तो सूत्र बदल जाते हैं, और बाद वाला संस्करण विजेता बन सकता है। यदि आप किसी आयातित मॉड्यूल से कई बार कुछ लंबा उपयोग करते हैं, फिर भी एक और संस्करण जीतता है:
from x import y as z
n के z उपयोगों के लिए आपको 18+ x + y + z * ( n +1) अक्षर मिलते हैं , जो कि y बड़ा है, तो एक बड़ा सुधार है, क्योंकि z को 1 बनाया जा सकता है।
__import__("x").doSomething()
कि यह एक चार से छोटा है from x import*;doSomething()
। शायद आप दो वर्णों के रूप में नई रेखा को गिन रहे हैं? और मुझे याद है कि ब्रेक-सम पॉइंट 5 हो रहा है, के बीच में time
और random
।
z=__import__("x").y
एक बाइट से कम हैfrom x import y as z
from x import*;z=y
:।
__import__
एक नामित फ़ंक्शन के अंदर मदद करेगा क्योंकि यह एक इंडेंट ब्लॉक के अंदर होगा। एक आयात पर अतिरिक्त खर्च होगा क्योंकि यह दो लाइनों और इंडेंट पर है। (यह मानते हुए कि आयात समारोह के बाहर की अनुमति नहीं है।)