2013-08-08 6 views
5

project structure पर पाइथन गाइड के अध्याय में, "शीर्ष-स्तरीय कथन" शब्द कुछ बार लाया गया है। मुझे यकीन नहीं है कि यह वास्तव में क्या संदर्भित करता है। मेरा अनुमान है कि यह कोई भी परिवर्तनीय घोषणा है जो किसी भी फ़ंक्शन या क्लास विधियों के बाहर होती है जो मॉड्यूल लोड होने पर ही आग लगती है। क्या ये सही है? क्या इसमें मॉड्यूल का import स्टेटमेंट भी शामिल है?पायथन में शीर्ष-स्तरीय विवरण क्या है?

+2

मुझे लगता है कि इसमें न केवल आयात और घोषणाएं शामिल होंगी, लेकिन कोई भी कोड जो बाहरी कार्यों और वर्गों के बाहर होता है। –

उत्तर

15

यह केवल परिवर्तनीय घोषणा नहीं है (और वैसे भी कोई परिवर्तनीय घोषणा नहीं है)। यह बहुत ज्यादा कुछ भी है कि खरोज स्तर पर शुरू होता है है 0.

import sys   # top-level 

3 + 4    # top-level 

x = 0    # top-level 

def f():   # top-level 
    import os  # not top-level! 
    return 3  # not top-level 

if x:    # top-level 
    print 3  # not top-level 
else: 
    print 4  # not top-level, but executes as part of an if statement 
        # that is top-level 

class TopLevel(object): # top-level 
    x = 3   # not top-level, but executes as part of the class statement 
    def foo(self): # not top-level, but executes as part of the class statement 
     print 5 # not top-level 
2

मुझे लगता है कि आपको यह बिल्कुल सही मिला है, और हां इसमें आयात विवरण शामिल होंगे।

1

यहाँ "शीर्ष स्तर के बयान" का पहला उल्लेख है:

एक बार modu.py पाया जाता है, अजगर दुभाषिया मॉड्यूल निष्पादित करेंगे एक अलग दायरे में। Modu.py में किसी भी शीर्ष-स्तरीय कथन को निष्पादित किया जाएगा, जिसमें अन्य आयात भी शामिल हैं। मॉड्यूल के शब्दकोश में फ़ंक्शन और क्लास परिभाषाएं संग्रहीत की जाती हैं।

इससे यह स्पष्ट हो जाता है कि उनका वास्तव में क्या अर्थ है "चीजें जिन्हें import समय पर व्याख्या किया गया है"।

हालांकि यह बहुत उपयोगी नहीं है, Python documentation itself वाक्यांश "शीर्ष-स्तर" (घटक, जिसका अर्थ है "इस संदर्भ में" कथन "का भी उपयोग करता है)।

नोट इस मॉड्यूल है कि:

"""a python module, spam.py""" 

def spam(): 
    return "spam" 

class Spam(object): 
    pass 

इसमें दो बयान, def और class है। ये आयात समय पर दोनों निष्पादित किए गए हैं। ये परिभाषाएं यौगिक बयान हैं (def और class विवरण देखें)। यदि शीर्ष-स्तर def से जुड़े सजावटी हैं, जो चलाने के लिए और भी उच्च-स्तरीय चीजें जोड़ता है। (यह भी user2357112's answer देखें: एक class बयान चल invokes अधिक आंतरिक कार्यप्रणाली।)

शीर्ष पर एक import sys जोड़ें और आप एक तिहाई बयान है, जो sys आयात जोड़ दिया है। हालांकि, अगर आप इस ऐड यदि:

def ham(eggs): 
    import os 
    return os.path.basename(eggs) 

आप अभी भी केवल एक ही बयान, def ham, शीर्ष स्तर के सामान को जोड़ लिया है। यह तब होता है जब ham स्वयं निष्पादित (कहा जाता है) कि import os चलाया जाएगा।

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