2011-05-15 18 views
7

मेरे पास 2 फ़ाइलें main.py और irc.py हैं।
main.pyपायथन: मैं मॉड्यूल में मुख्य फ़ाइल से चर का उपयोग कैसे कर सकता हूं?

import irc 
var = 1 
func() 

irc.py

def func(): 
    print var 

जब मैं main.py चलाने के लिए मैं यह त्रुटि

NameError: global name 'var' is not defined

यह काम कैसे हो रही है कोशिश?

@Edit
मैंने सोचा था कि वहाँ एक बेहतर समाधान है, लेकिन दुर्भाग्य से केवल एक ही मैंने पाया अन्य फ़ाइल
main.py बनाने के लिए और दोनों फ़ाइलों को आयात करने के लिए है

import irc 
import another 
another.var = 1 
irc.func() 

irc.py

import another 
def func(): 
    print another.var 

another.py

var = 0 

उत्तर

10

मत करो। इसे पास करें। अपने कोड को यथासंभव decoupled के रूप में प्रयास करें और रखें: एक मॉड्यूल को दूसरे के आंतरिक कार्यों पर भरोसा नहीं करना चाहिए। इसके बजाय, जितना संभव हो उतना प्रयास करें और बेनकाब करें। इस तरह, जब भी आप चीजों को थोड़ा अलग व्यवहार करना चाहते हैं, तो आप दुनिया को बदलने से खुद को सुरक्षित रखेंगे।

main.py

import irc 
var = 1 
func(var) 

irc.py

def func(var): 
    print var 
+0

यह आसान मुझे बजाय इस तर्क – gr56

+0

@ gr56 जोड़ने का मुख्य फाइल करने के लिए इस समारोह को स्थानांतरित करने के लिए किया जाएगा: तब यह लग रहा पुनर्रचना की तरह क्रम में है। यदि यह संभव नहीं है, तो मैं आपके तीसरे मॉड्यूल के समाधान के साथ जाऊंगा जिसमें केवल 'var' ऑब्जेक्ट होता है और दोनों द्वारा आयात किया जाता है। यदि यह आपके लिए काम करता है, तो कृपया इसे अपने प्रश्न के उत्तर के रूप में पोस्ट करें और इसे स्वीकार करें। –

+0

@ सैमिरतालवार आप इसे कार्यों के लिए कर सकते हैं, कक्षाओं के तत्काल के बारे में क्या? उदाहरण के लिए, आप किसी अन्य मॉड्यूल में कक्षा के उदाहरण परिभाषित करना चाहते हैं जिसे आप आयात कर सकते हैं। इस मामले में तर्क प्लेसहोल्डर्स नहीं हो सकते हैं। –

0

खैर, समारोह में वर घोषित नहीं किया गया है। आप इसे एक तर्क के रूप में पारित कर सकते हैं। main.py

import irc 
var = 1 
func(var) 

irc.py

def func(str): 
    print str 
1

दो विकल्प।

from main import var 

def func(): 
    print var 

यह मूल नाम को संदर्भ मॉड्यूल में संदर्भित करेगा।

import main 

def func(): 
    print main.var 

यह आपको अन्य मॉड्यूल से चर का उपयोग करने देगा, और वांछित होने पर आपको इसे बदलने की अनुमति देगा।

func.py:

import __main__ 
def func(): 
    print(__main__.var) 

मुख्य

+0

ओह, यह सिर्फ गलत है। म्यूचुअल आयात मुझे हेबी जिंदगी देते हैं। –

+0

तब आप नहीं जानते कि आप क्या कर रहे हैं। म्यूचुअल आयात पूरी तरह से सुरक्षित हैं, और कुछ स्पष्ट प्रतिबंधों के साथ ठीक काम करते हैं। –

+0

@Ignacio: और वे समस्या को उजागर करने के लिए डिज़ाइन किए गए इस खिलौने कोड में ठीक काम करेंगे। मुझे संदेह है कि वे वास्तविक चीज़ में अपेक्षित काम करेंगे। यहां तक ​​कि यदि वे करते हैं, तो वे मॉड्यूल के बीच अस्पष्ट लाइनों को प्रोत्साहित करेंगे जो केवल नई सुविधाओं को जोड़ने और पुराने लोगों को बनाए रखने के लिए बहुत कठिन हैं। मैं ऐसी परिस्थिति की कल्पना नहीं कर सकता जहां आपसी आयात एक तीसरे मॉड्यूल से बेहतर काम करता है जो मूल दो की सेवा करता है। –

5

ठीक है, कि मेरे कोड है जो ठीक काम करता है।py:

from func import func 

var="It works!" 
func() 
var="Now it changes!" 
func() 
+0

मुझे यह समाधान पसंद है और यह काम करता है ... लेकिन ग्रहण मुझे एक 'अपरिभाषित करता है आयात से परिवर्तनीय: किसी भी आयातित चर या मुख्य से फ़ंक्शन पर var 'त्रुटि। इस के आसपास होने का कोई तरीका? – user4061565

+0

देखें [कैसे करें-i-fix-pydev-undefined-variable-from-import-error] (https://stackoverflow.com/questions/2112715/how-do-i-fix-pydev-undefined-variable- से-आयात त्रुटियों) – user4061565

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

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