python - Why is "from ... import *" in a function not allowed? -
से:
आयात के वाइल्ड कार्ड फ़ॉर्म -
मॉड्यूल आयात से *- केवल मॉड्यूल स्तर पर अनुमति है। इसे कक्षा या फ़ंक्शन परिभाषाओं में उपयोग करने का प्रयास करने से एकSyntaxErrorहोगा।
क्यों? एक समारोह में इसका उपयोग करने से बचने का क्या अर्थ है? क्या समस्या है?
CPython कार्यान्वयन स्थानीय चर के लिए एक विशेष अनुकूलन का उपयोग करता है: वे गतिशील रूप से नहीं देखा जाता है एक शब्दकोश से रनटाइम पर, ग्लोबल हैं, लेकिन संकलन समय पर सूचकांक को स्थिर रूप से निर्दिष्ट किया जाता है, और रनटाइम पर इंडेक्स द्वारा देखा जाता है, जो कि बहुत तेज़ है इसके लिए पायथन कम्पाइलर को संकलित समय पर सभी स्थानीय नामों की पहचान करने की आवश्यकता होती है, जो आपके कार्य स्तर पर वाइल्डकार्ड आयात पर असम्भव है।
पायथन 2 में, अभी भी एक फ़ॉलबैक तंत्र है जिसे लागू किया गया था ऐसे मामले में जहां सभी स्थानीय नामों को स्थिर रूप से निर्धारित करना संभव नहीं था उदाहरण के लिए यह कोड
def f (): exec "x = 2" प्रिंट xपायथन 2 में अपेक्षित काम करता है, जबकि
def f (): exec ("x = 2") प्रिंट (x)
Comments
Post a Comment