मॉड्यूल आयात करना कुछ भी बर्बाद नहीं करता है ; मॉड्यूल हमेशा पूरी तरह से आयात किया जाता है ( sys.modules
मानचित्रण में), इसलिए आपके द्वारा उपयोग किए जाने वाले तार import sys
या from sys import argv
बिना किसी बाधा के।
दो बयानों के बीच एकमात्र अंतर यह है कि नाम क्या है; मॉड्यूल import sys
में नाम sys
को बांधता है (इसलिए sys
-> sys.modules['sys']
), मॉड्यूल के अंदर निहित विशेषता पर सीधे इंगित करते हुए from sys import argv
, एक अलग नाम बांधता है argv
(इसलिए argv
-> sys.modules['sys'].argv
)। बाकी sys
मॉड्यूल अभी भी है, चाहे आप मॉड्यूल से कुछ और उपयोग करें या नहीं।
दोनों दृष्टिकोणों के बीच कोई प्रदर्शन अंतर भी नहीं है। हां, sys.argv
दो चीजों को देखना होगा; इसे sys
अपने वैश्विक नामस्थान (मॉड्यूल को ढूंढना) में देखना होगा, फिर विशेषता को देखना होगा argv
। और हाँ, from sys import argv
आप विशेषता लुकअप को छोड़ सकते हैं, क्योंकि आपके पास पहले से ही विशेषता का सीधा संदर्भ है। लेकिन import
बयान को अभी भी उस काम को करना है, यह आयात करते समय एक ही विशेषता दिखता है, और आपको केवल argv
एक बार उपयोग करने की आवश्यकता होगी । यदि आपको argv
एक लूप में हजारों बार उपयोग करना पड़ता तो शायद इससे फर्क पड़ता, लेकिन इस विशिष्ट मामले में यह वास्तव में नहीं होता है।
एक या दूसरे के बीच का चुनाव इसके बजाय कोडिंग शैली पर आधारित होना चाहिए ।
एक बड़े मॉड्यूल में, मैं निश्चित रूप से उपयोग करूँगा import sys
; कोड प्रलेखन मामले, और sys.argv
एक बड़े मॉड्यूल में कहीं का उपयोग करने से यह बहुत स्पष्ट हो जाता है कि आप अभी तक की तुलना में क्या उल्लेख कर रहे हैं argv
।
यदि आपके द्वारा उपयोग की जाने वाली एकमात्र जगह किसी फ़ंक्शन को कॉल करने के लिए argv
किसी '__main__'
ब्लॉक में है main()
, from sys import argv
तो इसका उपयोग करें यदि आप उस बारे में अधिक खुश महसूस करते हैं:
if __name__ == '__main__':
from sys import argv
main(argv)
मैं अभी भी import sys
वहाँ खुद का उपयोग करेंगे । सभी चीजें समान (और वे, बिल्कुल, प्रदर्शन और इसे लिखने के लिए उपयोग किए जाने वाले पात्रों की संख्या के संदर्भ में ), कि मेरे लिए आंख पर आसान है।
यदि आप पूरी तरह से कुछ और आयात कर रहे हैं, तो शायद प्रदर्शन चलन में आ जाता है। लेकिन केवल अगर आप एक मॉड्यूल में एक विशिष्ट नाम का उपयोग कई बार करते हैं , उदाहरण के लिए एक महत्वपूर्ण लूप में। लेकिन फिर एक स्थानीय नाम (एक फ़ंक्शन के भीतर) अभी भी तेज होने जा रहा है:
import somemodule
def somefunction():
localname = somemodule.somefunctionorother
while test:
# huge, critical loop
foo = localname(bar)