2011-08-15 28 views
35

Böyle bir şey yapabilmek istiyorumErişme modül düzeyi değişkenleri

#secondmodule 
import mymodule 
mymodule.load() 

#thirdmodule 
from mymodule import var 
print var #Shouldn't be None 

Ama Modülde tanımlanan bir fonksiyondan bir modül değişkenine nasıl başvurulacağını bilmiyorum.

Bu mümkün mü? Yoksa bunu kullanmadığım her yerde küresel bir deklarasyon koymam gerekecek. Yoksa tamamen yanlış mı gidiyorum?

cevap

50

Sadece

def load(): 
    global var 
    var = something() 

Küresel değişkenler salt okunur kardeş yöntemleri değişir. Bir değişken global olarak belirtilmedikçe, Python bunu yerel olarak kabul eder, ancak yerel kapsamda ad yoksa, yerel bir değişken adına bir okuma erişimi modül düzeyinde kapsama ulaşır.

Sen çoğunlukla buna sahip görünmektedir da use of “global” keyword in python ve global açıklamada

+0

mantıklı ve güzel çalıştı, seni oy vereceğini, ama henüz 15 yaşında değilim. Teşekkürler. – dennmat

+0

Aramıza hoş geldiniz :) – Evpok

+0

@dennmat Genel değişkenleri kullanmayın. Onlara ihtiyacınız olduğunu düşünüyorsanız, genellikle tasarımınızın hatalı olduğuna dair bir işarettir. – schlamar

15

hakkında daha fazla ayrıntı için doc bakınız. Python'da sadece "modül seviyesi" değişkenlerinin global olarak adlandırıldığını görüyorsunuz. (Gerçekten global değiller, ancak yalnızca bildirildikleri modüle göre globaldirler.)

öğesinin genel değişkenini değiştirdiğiniz herhangi bir işlevde (adın farklı bir nesneye başvurmasını istiyorsanız), global olarak bildirilmelidir. Yani load() işlevinin başında global var olması gerekiyor. Yalnızca küresel bir değişkenin değerini kullanarak veya varsa bir liste olarak böyle bir değişken türüdür ve bunu değiştirerek, ancak bu ad noktaları, bunun küresel beyan gerekmez bu nesneyi değiştirerek değilse.

import deyimi başka içine bir modülünden bir modül düzeyi değişkeni içe nasıl, sen keşfettiler olarak vardır.

+0

Teşekkürler, bu, in-Aslında çözüm olduğunu bana globalsın ve piton an biraz daha yığınlarını anlamamıza yardımcı olur. – dennmat

+1

Bu cevap benim şüphem, ''.Sadece global bir değişkenin değerini kullanıyorsanız ya da bir liste gibi değişebilir bir türse ve onu değiştiriyorsanız, ancak ismin işaret ettiği nesneyi değiştirmiyorsanız, global olarak beyan etmeniz gerekmez. @kindall! – swdev

+0

Benim durumumda, yöntemimde global değişken kullanıyordum, hiçbir yerde değiştirmedim. Bir sonraki görüşmede, boştu. emin değilim neden. :( –

İlgili konular