मॉड्यूल आयात करना कुछ भी बर्बाद नहीं करता है ; मॉड्यूल हमेशा पूरी तरह से आयात किया जाता है ( 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)