2012-03-30 27 views
6

Varsayılan değişken olarak kullandığım genel değişkenler var. Programımda neler olduğuna bağlı olarak, bu varsayılanları değiştirme ve kodun kalan işlemi boyunca değişikliklerin devam etmesini sağlama yeteneğine ihtiyacım var. Her yerde değişmelerini ve tanımlanmasını istiyorum, dolayısıyla global bir değişken kullandım. İşte bu değişkenleri nasıl değiştirmeye çalıştığımı gösteren bazı test kodları.Python'da global değişkenler karışıklığı

Bunu zaman aşağıdaki sorunlar var ...

  1. programı myGlobal ana tanımlanan edilmediğini düşünüyor. Ancak vardır. Niye ya? myGlobalmyGlobal değiştirdikten sonra bir alt yordamı çağırdığımda. Bunun olmasını istemedim.

Burada yapmaya çalıştığım şeyi gerçekleştirmenin uygun yolu nedir? Örnekler?

def main(argv): 
    global myGlobal 
    #... 
    myGlobal = "bar" 

Aksi takdirde atama sadece yeni bir oluşturur: size atamak yerine bir işlev içinde bir modül-küresel değişkeni okumak istiyorsanız

#!/usr/bin/python 

import sys 

myGlobal = "foo" 

print "********************" 
print "MyGlobal %s" % myGlobal 
print "********************" 


def main(argv): 

    #UnboundLocalError: local variable 'myGlobal' referenced before assignment 
    print '1. Printing the global again: ' + myGlobal 

    myGlobal = "bar" 
    print "2. Change the global and print again: " + myGlobal 

    # now call a subroutine 
    mySub() 

# Checks for output file, if it doesn't exist creates one 
def mySub(): 
    # Why isn't the global "bar" not "foo"? 
    print '3. Printing the global again: ' + myGlobal 

    myGlobal = "black sheep" 
    print "4. Change the global and print again: " + myGlobal 




if __name__ == "__main__": 
    main(sys.argv[1:]) 

cevap

8

, sen global anahtar kelime gerekir Genel değişkeninizi gölgeleyen yerel değişken (yani, değişkeni, örneğinizde olduğu gibi, global değişkeni etkilemez).

class MyApp(object): 
    def main(self, argv): 
    self.myVar = "bar" 
    self.mySub() 

    def mySub(self): 
    print self.myVar 

MyApp().main(sys.argv[1:]) 
2

Ne arıyorsun Python global statement geçerli:, ayrıca güzel bir şekilde fonksiyonları payı halini alması için buraya bir sınıf yararlanabileceğini söyledi

. main ve mySub kod kodlarınızdan önce global myGlobal'u ekleyin ve orada tahmin edilebilir bir davranışınız var. Bunu söylediyseniz, fonksiyonlar arasında durum bilgisini aktarmanız gerekiyorsa, işleve argümanlar kullanın. Bu çok daha güzel.

İlgili konular