2015-06-24 7 views
8

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

+2

@ जोड़ें: शायद डुप्लिकेट नहीं; यदि आप जिस मॉड्यूल को चलाने की कोशिश कर रहे हैं, वह सामानों को आयात करने की कोशिश कर रहा है, तो आप इसे आयात पर नहीं चाहते हैं, उस प्रश्न में कुछ भी नहीं है जो आप इसे रोकने के लिए कर सकते हैं। – user2357112

+0

@ user2357112 आह, हाँ। मैंने '__main__' चेक की संभावित कमी के बारे में सोचा नहीं था। माफ़ कीजिये! – Edd

उत्तर

14

another.py में, कोड है कि आप एक ब्लॉक है कि केवल तब चलता है जब स्क्रिप्ट स्पष्ट रूप से चलाने के लिए कहा जाता है और सिर्फ

def my_func(x): 
    return x 

if __name__ == '__main__': 
    # Put that needs to run here 
अब

आयात नहीं करता है, तो आप your_script.py में हैं में भाग जा नहीं करना चाहती के लिए कदम , आप इसे आयात कर सकते हैं, और यह

from another import my_func 
my_func(...) 
+1

बहुत बहुत धन्यवाद! यह काम किया! –

1

नहीं चलेंगे अन्य अजगर स्क्रिप्ट है, जिसे आप आयात करने के लिए जा रहे हैं में, आप सभी कोड निम्नलिखित अंदर स्क्रिप्ट चलाने पर निष्पादित करने की आवश्यकता है कि रखना चाहिए अगर ब्लॉक -

if '__main__' == __name__: 

केवल जब एक स्क्रिप्ट के रूप में है कि अजगर फ़ाइल चल रहा है, __name__ चर __main__ हो जाएगा। जब आप स्क्रिप्ट आयात करते हैं, तो स्थिति के अंदर कोई कोड नहीं चलाएगा।

2

आप फ़ंक्शन को किसी अन्य फ़ाइल में ले जा सकते हैं और इसे अपनी फ़ाइल में आयात कर सकते हैं।

लेकिन तथ्य यह है कि आप आयात पर सबकुछ चला रहे हैं, मुझे लगता है कि आपको अपने आयातित मॉड्यूल में अधिकांश चीजों को कार्यों में स्थानांतरित करने की आवश्यकता है और केवल उन्हें मुख्य गार्ड के साथ ही कॉल करने की आवश्यकता है।

def print_one(): 
    print "one" 

def print_two(): 
    print "two" 

def what_i_really_want_import(): 
    print "this is what I wanted" 


if __name__ == '__main__': 

    print_one() 
    print_two() 

न कि जो आप शायद है, मैं की तरह

print "one" 

print "two" 

def what_i_really_want_import(): 
    print "this is what I wanted" 

दिखता है लगता है जो के साथ एक समारोह में मुख्य गार्ड कुछ भी आयात समय में निष्पादित नहीं किया जाएगा, लेकिन तब भी आप इसे अगर आप कॉल कर सकते हैं की तुलना में करने की जरूरत है। यदि नाम == "मुख्य" वास्तव में इसका मतलब है "क्या मैं इस स्क्रिप्ट को कमांड लाइन से चला रहा हूं?" एक आयात पर, यदि सशर्त झूठी वापसी करेगा तो आपकी print_one(), print_two() कॉल नहीं होंगे।

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

def print_one(): 
    print "one" 

def print_two(): 
    print "two" 


time_when_loaded = time.time() 

class MySingleton(object): 
    pass 

THE_ANSWER = 42 
singleton = MySingleton() 

लेकिन बड़े पैमाने पर, लोड पर निष्पादित करने के लिए बहुत अधिक कोड न छोड़ें, अन्यथा आप इन समस्याओं के साथ समाप्त हो जाएंगे।

-5

1.Open संपादक 2 में पेस्ट पुराने जमाने दूर

सरल समाधान कभी कभी गंदे है परिभाषा 3. कॉपी का पता लगाएं।

+0

लोलोलोलोलोलोलोल – Dagrooms

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