2015-01-15 6 views
14

मैं argparse और एक स्क्रिप्ट में एक if __name__ == '__main__' परीक्षण है कि मैं भी मुझे लगता है कि परीक्षण के अंतर्गत argparse आयात करना चाहिए और फिर इसे प्रारंभ, एक मॉड्यूल के रूप में उपयोग करना चाहते हैं का उपयोग कर रहा है? स्क्रिप्ट में argparse का उपयोग करके मैंने पाया कि स्टाइल गाइड में से कोई भी नहीं है और Argparse स्क्रिप्टिंग के कई उदाहरण 'if name' test का उपयोग नहीं करते हैं या इसे अलग-अलग उपयोग करते हैं। यहाँ मैं अब तक के साथ जा कर दिया गया है है:पायथन: आयात करें और Argparse आरंभ करें यदि __name__ == '__main__' के बाद?

#! /usr/bin/env python 

def main(name): 
    print('Hello, %s!' % name) 

if __name__ == '__main__': 
    import argparse 
    parser = argparse.ArgumentParser(description = 'Say hello') 
    parser.add_argument('name', help='your name, enter it') 
    args = parser.parse_args() 

    main(args.name) 

मैं शीर्ष पर मेरे अन्य मॉड्यूल के साथ argparse आयात और बजाय स्क्रिप्ट के शरीर में इसे कॉन्फ़िगर करना चाहिए?

उत्तर

14

मैं शीर्ष पर आयात कर दिया है, लेकिन कोड if __name__ ब्लॉक के अंदर यह का उपयोग करता है छोड़ना होगा:

import argparse 

# other code. . . 

def main(name): 
    print('Hello, %s!' % name) 

if __name__ == '__main__': 
    parser = argparse.ArgumentParser(description = 'Say hello') 
    parser.add_argument('name', help='your name, enter it') 
    args = parser.parse_args() 

    main(args.name) 

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

+2

[पीईपी 8] (https://www.python.org/dev/peps/pep-0008/#imports) फ़ाइल के शीर्ष पर सभी मॉड्यूल आयात करने की सलाह देते हैं करता है। मुझे लगता है कि प्रवेश बिंदु परीक्षण का उपयोग कर स्क्रिप्ट के लिए कोई अपवाद नहीं है। – Daniel

2

import argparseif __name__ == '__main__' ब्लॉक के अंदर डालना ठीक है अगर argparse केवल उस ब्लॉक के भीतर संदर्भित है। जाहिर है कि ब्लॉक के भीतर कोड यदि आपका मॉड्यूल एक और मॉड्यूल द्वारा आयात किया जाता है नहीं चलेंगे, ताकि मॉड्यूल यह main के लिए खुद का तर्क है (संभवतः यह ArgumentParser की स्वयं उदाहरण का उपयोग) प्रदान करने के लिए होगा।

+0

समझ में आता है कि। वह 'अगर नाम' परीक्षण किसी भी अनावश्यक मॉड्यूल को आयात होने से रोक देगा (शायद कुछ सिस्टम संसाधनों को सहेज रहा है)। जब तक यह नीचे के मॉड्यूल आयात करने के लिए किसी भी शैली सम्मेलन को अपमानित नहीं करता है, वही है जो मैं साथ जाऊंगा। – Daniel

+0

व्यक्तिगत तौर पर मैं BrenBarn साथ सहमत हैं कि यह उन सब को शीर्ष पर है करने के लिए एक _bit_ अच्छे है, लेकिन यह किसी भी तरह से काम करेगा। अधिक चर्चा [यहां] (http://stackoverflow.com/questions/128478/should-python-import-statements-always-be-at-the-top-of-a-module)। – 101

संबंधित मुद्दे