2011-03-21 11 views
7

örneğin: assginment ifadesi yeni bir yerel değişken bildirecektir. Ben fonk1 kapsamında değişken foo nasıl değiştirebileceğiniziPython, üst kapsamdaki bir değişkenin değerini nasıl değiştirebilirim?

def func2(): 
    global foo 
    foo = 'global changed in func2' #changed the foo value in global scope 

: Küresel içinde foo kullanacak

foo = 'global' 
def func1(): 
    foo = 'func1' 
    def func2(): 
     foo = 'local variable in func2' 

kullanımı küresel beyan?
Yardımlarınız için teşekkürler.

Düzenleme:

teşekkür ederiz Brandon Craig Rodos, sonunda kendine anlamını anlamak.

İç içe 3'ten fazla kapsam varsa, değişkeni bir listede saklayabilirim.

foo = ['global', 'function1', 'function2'] 
def func1(): 
    foo[1] = 'func1' 
    def func2(): 
     foo[2] = 'func2' 
     foo[1] = 'func1 modified in func2' 

Sadece bir global değişkeni kullanıyorum aslında. iki işlev iç içe varsa


yüzden biz

nonlocal foo 

ve iç içe üçten fazla fonksiyon varsa

global foo 

,
ve her fonksiyon kullanımı değişkenleri kullanabilirsiniz Diğer işlevler kapsamında, genel bir liste değişkeni neden bildirmiyoruz?
Yardımlarınız için teşekkür ederiz!

cevap

8

Python 3'te, bir global olmayan kapsamdaki bir değişkeni değiştirmek üzere izin almak için nonlocal anahtar sözcüğünü kullanabilirsiniz. Python 2'de, foo'u bir kapsam içinde yeniden atayamazsınız; Bunun yerine, bir liste [] gibi bir değişken nesnesine eşit foo ayarlayın ve sonra listede saklanan istediğiniz değeri sopa: piton 3.0'da ve yerel olmayan kelime kullanabilirsiniz yukarıda

def func1(): 
    foo = [None] 
    def func2(): 
     foo[0] = 'Test' 
+0

Teşekkürler, bu gerçekten yardımcı oldu. ama sadece hayal gücünde, iç içe 3'ten fazla fonksiyon varsa, daha fazla yardımcı olur musunuz lütfen? Teşekkürler. – netroyal

+0

Teşekkürler. Sonunda anlamın ne olduğunu anladım. İç içe ikiden fazla işlev varsa, her değeri foo [0] foo [1] foo [2] öğesinde saklamak için foo [1, 2, 3] 'ü kullanabilirsiniz. Tekrar teşekkürler! – netroyal

4

.