2012-09-13 19 views
26

मेरे पास एक कोड है जिसे मैं कई फाइलों में अलग करना चाहता हूं। Matlab में कोई भी आसानी से .m फ़ाइल को कॉल कर सकता है, और जब तक इसे विशेष रूप से किसी भी रूप में परिभाषित नहीं किया जाता है, तो यह केवल तभी चलाया जाएगा जब यह कॉल कोड का हिस्सा था। उदाहरण (संपादित):
test.m (matlab)एकाधिक फाइलों में विभाजित पायथन स्रोत कोड?

function [] = test() 
    ... some code using variables ... 
    test2 

test2.m (matlab)

... some more code using same variables ... 

कॉलिंग test परीक्षा में कोड के साथ-साथ में कोड चलाता है test2।

क्या पाइथन के लिए एक समान तरीका है, ... some more code ... को बाहरी फ़ाइल में डालने के लिए, यह बस पढ़ा जाएगा जैसे कि यह फ़ाइल में है जिसे इसे कहा जाता है?

+1

हां, आप अपनी फाइलों को विभिन्न मॉड्यूल में विभाजित कर सकते हैं और आपको जो चाहिए उसे आयात कर सकते हैं। http://docs.python.org/tutorial/modules.html – Borgleader

+2

अपने पसंदीदा पायथन ट्यूटोरियल को पढ़ें और बहुत अच्छी कमी के लिए मॉड्यूल –

उत्तर

17

मैं अभी पाइथन में मॉड्यूल उपयोग का शोध कर रहा हूं और सोचा था कि मैं ऊपर दिए गए टिप्पणियों में पूछताछ के सवाल का जवाब दूंगा ("वे मॉड्यूल में एम्बेडेड होने पर चर आयात कैसे करें?") दो दृष्टिकोण से:।

  1. चर/कार्य, और
  2. वर्ग संपत्ति/विधि

यहाँ कैसे मैं मार्कस के लिए चर पुन: उपयोग प्रदर्शित करने के लिए मुख्य कार्यक्रम f1.py पुनर्लेखन होता है:

:

import f2 
myStorage = f2.useMyVars(0) # initialze class and properties 
for i in range(0,10): 
    print "Hello, " 
    f2.print_world() 
    myStorage.setMyVar(i) 
    f2.inc_gMyVar() 
print "Display class property myVar:", myStorage.getMyVar() 
print "Display global variable gMyVar:", f2.get_gMyVar() 

यहाँ कैसे मैं पुन: प्रयोज्य मॉड्यूल f2.py पुनर्लेखन होता है

जब f1.py यहाँ निष्पादित किया जाता है क्या उत्पादन कैसा दिखेगा है:

%run "f1.py" 
Hello, 
World! 
Hello, 
World! 
Hello, 
World! 
Hello, 
World! 
Hello, 
World! 
Hello, 
World! 
Hello, 
World! 
Hello, 
World! 
Hello, 
World! 
Hello, 
World! 
Display class property myVar: 9 
Display global variable gMyVar: 10 

मुझे लगता है कि मार्कस इंगित होगा:

  • एक बार से एक मॉड्यूल के कोड अधिक का पुन: उपयोग करने के लिए, कार्यों या वर्गों में अपने मॉड्यूल के कोड डाल दिया,
  • मॉड्यूल में गुण के रूप में जमा चर का पुन: उपयोग करने के लिए, एक वर्ग के भीतर गुण प्रारंभ और "मनुष्य" और "सेटर" इतनी तरीकोंमुख्य कार्यक्रम मेंचरों की प्रतिलिपि बनाने की आवश्यकता नहीं है,
  • मॉड्यूल में संग्रहीत चर का पुन: उपयोग करने के लिए, चर शुरू करें और गेटर और सेटर फ़ंक्शंस का उपयोग करें। सेटर फ़ंक्शन वैरिएबल को वैश्विक के रूप में घोषित करेंगे।
18

पायथन ने आयात और नामांकन किया है, जो कि अच्छे हैं। अजगर में आप वर्तमान नाम स्थान में आयात कर सकते हैं, जैसे:

>>> from test import disp 
>>> disp('World!') 

या एक नाम स्थान के साथ:

>>> import test 
>>> test.disp('World!') 
+11

"जो अच्छे हैं" +1 के बारे में जानें। – mgilson

34

ज़रूर!

#file -- test.py -- 
myvar = 42 
def test_func(): 
    print("Hello!") 

अब, यह फाइल "(test.py") अजगर शब्दावली में एक "मॉड्यूल" है। हम इसे (जब तक यह हमारे PYTHONPATH में पाया जा सकता) आयात कर सकते हैं ध्यान दें कि वर्तमान निर्देशिका इसलिए यदि use_test समान निर्देशिका जहां test.py रहता है, तो आप तैयार हैं से चलाया जा रहा है, PYTHONPATH में हमेशा होता है:

#file -- use_test.py -- 
import test 
test.test_func() #prints "Hello!" 
print (test.myvar) #prints 42 

from test import test_funC#Only import the function directly into current namespace 
test_func() #prints "Hello" 
print (myvar)  #Exception (NameError) 

from test import * 
test_func() #prints "Hello" 
print(myvar)  #prints 42 

विशेष __init__.py फ़ाइलों के उपयोग के माध्यम से आप बहुत कुछ कर सकते हैं जो आपको एक ही मॉड्यूल के रूप में एकाधिक फ़ाइलों का इलाज करने की अनुमति देता है), लेकिन यह आपके प्रश्न का उत्तर देता है और मुझे लगता है कि हम बाकी को एक और समय के लिए छोड़ देंगे ।

+0

ठीक है, शायद मेरा उदाहरण इतना अच्छा नहीं है। मैं अपने सभी चर के साथ, अपना अतिरिक्त कोड कॉल करने में सक्षम होना चाहता हूं। मॉड्यूल को आयात करने से मुझे बहुत मदद नहीं मिलती है क्योंकि मुझे चर को स्थानांतरित करने की आवश्यकता होगी, नहीं? – Markus

+1

वैरिएबल भी आयात किए जा सकते हैं, हालांकि यह बहुत आम नहीं है और आप आमतौर पर ऐसा नहीं करना चाहते हैं ... (मेरा अपडेट देखें) – mgilson

2

आप दूसरी फ़ाइल आयात करके पाइथन में ऐसा ही कर सकते हैं, आयात किए जाने पर शीर्ष स्तर पर कोड चलाएगा। मैं सुझाव दूंगा कि यह सबसे अच्छा गंदा है, न कि एक अच्छा प्रोग्रामिंग अभ्यास। जब चलाने

print "World!" 

:: आप बंद बेहतर होगा modules

उदाहरण में अपने कोड का आयोजन:

F1.py:

print "Hello, " 
import f2 

F2.py

python ./f1.py 
Hello, 
World! 

स्पष्टीकरण के लिए संपादित करें: जिस हिस्से का मैं सुझाव दे रहा था वह "गन्दा" import कथन का उपयोग केवल आउटपुट उत्पन्न करने के दुष्प्रभाव के लिए है, अलग स्रोत फ़ाइलों के निर्माण के लिए नहीं।

+0

यदि मैं लूप में 'आयात f2' चिपकता हूं, तो यह केवल' दुनिया लिखता है! एक बार क्या मैं इसे किसी भी तरह बदल सकता हूं? – Markus

+0

मैं एक समारोह में 'प्रिंट' कथन (f2.py में) डालूंगा, केवल फाइल को एक बार आयात करूंगा और लूप में अपना नया फ़ंक्शन कॉल करूंगा। –

+0

लेकिन यही वह जगह है जहां मैं मुख्य कोड और "उप-कोड" में आवश्यक चर के साथ वास्तविक कोड को कॉल करने में परेशानी में भाग लेता हूं – Markus

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