/ / समारोह के भीतर अजगर पुस्तकालय आयात करने के बीच अंतर बनाम विश्व स्तर पर आयात करने के बीच? - अजगर, अजगर 3.x, अजगर-आयात

दुनिया भर में आयात बनाम फंक्शन के भीतर पायथन लाइब्रेरी आयात करने के बीच अंतर? - अजगर, पायथन-3.x, पायथन-आयात

मान लीजिए कि मैं एक फ़ंक्शन के अंदर उपयोग के लिए एक अजगर पुस्तकालय आयात करना चाहता हूं। क्या फंक्शन के भीतर लाइब्रेरी को इंपोर्ट करना बेहतर है या ग्लोबली इंपोर्ट करना बेहतर है?

यह करो

def test_func:
import pandas as pd
# code implementation

या विश्व स्तर पर आयात करने के लिए अजगर फ़ाइल के शीर्ष पर नीचे की रेखा है?

import pandas as pd

प्रत्येक दृष्टिकोण के पेशेवरों और विपक्ष क्या हैं? अजगर में सबसे अच्छा अभ्यास कौन सा है?

मैं अजगर v3.6 का उपयोग कर रहा हूं

संपादित करें: कुछ स्पष्टीकरण करने के लिए।

मान लीजिए कि मेरे 2 कार्य हैं।

def func1:
import pandas as pd
# code implementation

def func2:
import pandas as pd
# code implementation

अजगर स्क्रिप्ट दोनों कार्यों को चलाता है। क्या पुस्तकालय को दो बार आयात किया जाएगा या क्या अजगर केवल एक बार आयात करने के लिए पर्याप्त स्मार्ट है? इसका प्रदर्शन निहितार्थ है।

उत्तर:

जवाब के लिए 3 № 1

यह नाम-दृश्यता में अंतर है औरनिष्पादन समय-बिंदु। मॉड्यूल-स्तर का आयात तब आयात किया जाता है जब आपके द्वारा लोड की जा रही फ़ाइल आयात की जाती है या स्वयं चलती है। फ़ंक्शन स्थानीय एक स्पष्ट रूप से केवल यदि फ़ंक्शन चलाया जाता है। आयातित नाम या तो फ़ाइल में सभी चीजों के लिए दिखाई देते हैं, या केवल फ़ंक्शन के भीतर आयात को निष्पादित किया जाता है।

जैसा कि आयात विवरण को मारने के लिए एक लागत है (यद्यपि एक छोटा सा, लेकिन फिर भी), स्थानीय एक होगा हमेशा अमल, सिर्फ एक बार नहीं। यह मॉड्यूल को पूरी तरह से फिर से आयात नहीं करेगा हालांकि, पहली बार आयात किए जाने के बाद अजगर के मॉड्यूल को हटा दिया जाएगा (देखें reload तथा sys.modules)।

स्पष्ट रूप से सबसे अच्छा अभ्यास मॉड्यूल स्तर का उपयोग करना हैआयात, और यह कि आप 99.999% कोड में क्या देखते हैं। एक बहुत बड़ा कारण स्थिरता है - यदि आप यह समझना चाहते हैं कि मॉड्यूल में क्या निर्भरताएं हैं, तो यह सभी को कंघी करने के बजाय शीर्ष पर देखना सुविधाजनक है। कोड।

तो समारोह स्थानीय आयात का उपयोग कब करें?

तीन परिदृश्य हैं:

  • आप पहले "आयात का उपयोग नहीं कर सकते हैं। यह तब होता है जब एक db या अन्य सिस्टम / कार्यक्षमता के लिए बैकएंड को कॉन्फ़िगरेशन या सिस्टम निरीक्षण के माध्यम से रनटाइम पर चुना जाता है।

  • आप अन्यथा परिपत्र आयात करते हैं। यह एक दुर्लभ मामला है और एक कोड-गंध भी है, इसलिए यदि यह आवश्यक है, तो फिर से विचार करें।

  • मॉड्यूल आयात को कम करके स्टार्टअप-समय को कम करना। हालांकि यह बहुत कम ही उपयोगी है।

तो आपके मामले के लिए, उत्तर एक त्वरित और सरल "डॉन" टी डू इट है।


उत्तर № 2 के लिए 1

जब आप इसे आयात करते हैं, तो मॉड्यूल लोड हो जाएगा, इसलिए यदि आपको शायद ही कभी उपयोग किए जाने वाले मॉड्यूल को आयात करने की आवश्यकता होती है, लेकिन आरंभ करने के लिए बहुत समय लगता है, तो आपको इसे ज़रूरत पड़ने पर आयात करना चाहिए।

दरअसल, अगर हम केवल प्रदर्शन की परवाह करते हैं, लेकिन पठनीयता की नहीं, तो शायद मॉड्यूल को आयात करना हमेशा बेहतर होता है जब हमें वास्तव में इसकी आवश्यकता होती है।

लेकिन हमें अपने कार्यक्रम को बनाए रखने की आवश्यकता है। शीर्ष पर सभी मॉड्यूल आयात करना दूसरों को बताने का सबसे स्पष्ट तरीका है और खुद को बताएंगे कि कौन से मॉड्यूल का उपयोग किया जाता है।

योग करने के लिए, यदि आपके पास वास्तव में बहुत महंगा है लेकिन शायद ही कभी उपयोग किए जाने वाले मॉड्यूल हैं, तो आपको इसे स्थानीय रूप से आयात करना चाहिए। अन्यथा आपको उन्हें शीर्ष पर आयात करना चाहिए।