2013-09-27 12 views
8

आप आयातित फ़ाइल से फ़ंक्शन कैसे कॉल करते हैं? उदाहरण के लिए:पायथन: आयातित फ़ाइल से कॉलिंग फ़ंक्शन

टेस्ट:

import test2 
def aFunction(): 
    print "hi there" 

Test2:

import test 
aFunction() 

यह मैं एक नाम त्रुटि दिखा सकते हैं, कह रही है मेरी फ़ंक्शन मौजूद नहीं है। मैं भी कोशिश की है:

from test import aFunction 

और:

from test import * 

मैं भी परीक्षा में test2 आयात नहीं की कोशिश की है। मैं सी ++ से पाइथन में आ रहा हूं, इसलिए मुझे डर है कि मैं अनुभवी पायथन प्रोगोगर्स के लिए कुछ स्पष्ट रूप से स्पष्ट हूं ...

+1

आपका 'से परीक्षण आयात aFunction' काम किया जाना चाहिए था, क्या त्रुटि आप देखा? –

+3

ध्यान दें कि एक ['test' पैकेज] (http://docs.python.org/2/library/test.html) भी पाइथन के साथ शामिल है, आप * * * आयात कर सकते हैं। –

+0

मुझे अपनी बड़ी परियोजना में एक ही त्रुटि हो रही थी, मैंने अपनी समस्या दिखाने के लिए परीक्षण फाइलें बनाईं। मुझे त्रुटि मिल रही थी "आयात त्रुटि: नाम 'फ़ंक्शन' आयात नहीं कर सका। – RageCage

उत्तर

9

आप एक परिपत्र आयात कर रहे हैं। test.py आयात test2.py जो test.py आयात करने का प्रयास करता है।

ऐसा मत करें। test2 आयात test, उस मॉड्यूल ने सभी कोड निष्पादित नहीं किया है; समारोह अभी तक परिभाषित नहीं है:

  • test संकलित और क्रियान्वित किया जाता है, और एक खाली मॉड्यूल वस्तु sys.modules में जोड़ा जाता है।

  • लाइन import test2 चलाया गया है।

    • test2 संकलित किया गया है और मार डाला, और एक खाली मॉड्यूल वस्तु sys.modules में जोड़ा जाता है।

    • लाइन import test चलाया गया है।

      • testsys.modules में एक मॉड्यूल के रूप में पहले से ही मौजूद है, इस वस्तु लौट आए और नाम test के लिए बाध्य है।
    • अगली पंक्ति test.aFunction() चलाने की कोशिश करती है। test में ऐसा कोई नाम मौजूद नहीं है। एक अपवाद उठाया गया है।

  • लाइनों def aFunction() को परिभाषित मार डाला कभी नहीं रहे हैं, क्योंकि एक अपवाद उठाया गया था।

import test2 लाइन निकालें, और चलाने के test2.pyसीधे, और समारोह का आयात ठीक काम करेगा:

import test 

test.aFunction() 
+0

+1 आयातों के समाधान के बारे में अच्छी व्याख्या। कल मैंने (किसी भी भारी जावा पृष्ठभूमि के साथ) चैट किया था वास्तव में वास्तव में पाइथन में आयात करने के तरीके से आश्चर्यचकित था। – Brian

+0

मुझे संदेह था कि। जैसा कि आप देखेंगे, मैंने उल्लेख किया है कि मैंने इसे दोनों तरीकों से किया है। – RageCage

+0

@ ब्रैडडनकेन्स कुछ और चल रहा होगा क्योंकि जैसा कि यह काम करता है। – Brian

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