2012-05-19 9 views
5

मेरे द्वारा पढ़े गए सभी पायथन दस्तावेज़ों से संकेत मिलता है कि, साइड इफेक्ट्स अलग-अलग हैं, यदि आप मॉड्यूल ए आयात करते हैं और फिर संदर्भ एए आयात करते हैं, तो आप उसी वैरिएबल का संदर्भ दे रहे हैं जैसे आपने "एक आयात से" लिखा था।क्यों ... आयात पाइथन में आयात समय पर मूल्य से जुड़ने लगता है?

हालांकि, यह मामला यहां प्रतीत नहीं होता है और मुझे यकीन नहीं है कि क्या हो रहा है। मैं पायथन 2.6.1 का उपयोग कर रहा हूँ।

अगर मैं एक मॉड्यूल alpha.py बनाएँ:

Value of bravo is: None 
Value of alpha.bravo is: 1 

क्यों:

import sys, os 
sys.path.append(os.path.abspath('.')) 

import alpha 
from alpha import bravo 

alpha.set_bravo() 
print "Value of bravo is: %s" % bravo 
print "Value of alpha.bravo is: %s" % alpha.bravo 

तब मैं इस उत्पादन प्राप्त करें:

bravo = None 

def set_bravo(): 
    global bravo 
    bravo = 1 

फिर एक स्क्रिप्ट है कि मॉड्यूल का आयात करता है बनाने क्या वह?

उत्तर

5

from ... import ...हमेशा तुरंत बांधता है, भले ही पिछले एक import केवल मॉड्यूल/पैकेज आयात किया।

संपादित करें:

कंट्रास्ट निम्नलिखित:

import alpha 

alpha.set_bravo() 

from alpha import bravo 

print "Value of bravo is: %s" % bravo 
print "Value of alpha.bravo is: %s" % alpha.bravo 
+0

आह। मैंने एक मॉड्यूल से स्थानीय नामस्थान में 'आयात' आयातित चर नामों को सोचा, लेकिन ऐसा लगता है कि यह स्थानीय नामस्थान में उसी नाम को आयातित चर के * मान * पर बांधता है। मुझे यकीन नहीं है कि यह लंगड़ा है या मैं यह महसूस करने के लिए बहुत लंगड़ा हूं कि यह नहीं है। –

+2

सही। पाइथन में "चर" नहीं हैं, केवल "नाम" हैं। –

0

अजगर -m जिले bravo.py निष्पादित कि देखने के लिए संकलन के दौरान अपने कोड में हो रहा है। मुझे यह ब्लॉग समझ में आता है कि हुड के नीचे क्या हो रहा है। http://late.am/post/2012/03/26/exploring-python-code-objects

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