Fark

2016-03-28 35 views
0

ben modül kapsamı içine yapıya sahipken: Oldukça iyi çalışırFark

def test(): 
    return 1 


test = test() 
print test 

.

Ama fonksiyon kapsamı içine aynı çalışıyorum eğer:

def test(): 
    return 1 

def go(): 
    test = test() 
    print test 

Ben UnboundLocalError alıyorum:

Traceback (most recent call last): 
    File "my.py", line 16, in <module> 
    go() 
    File "my.py", line 12, in go 
    test = test() 
UnboundLocalError: local variable 'test' referenced before assignment 

ben biraz karıştı. Bu davranışlar arasında neden böyle bir fark var?

cevap

0

Bu örnekte, test, aynı kapsamda tanımlanmıştır, bu nedenle test işlevi, işleve başvuracaktır.

def test(): 
    return 1 


test = test() 
print test 

bu örnekte test= bir çizgi başlayarak hemen çalışabilmesi için yerel başvuru silecektir ve henüz atanmamış işaretler, böylece test() kullandığınızda değişken olmadığını söyleyecektir ederken atanmış.

def test(): 
    return 1 

def go(): 
    # here 
    test = test() 
    print test 

ilk örneğe benzer davranışı elde etmek için ekleyebilir nonlocal ya ben # here işaretlenmiş ve seni aynı davranışı elde edecek eminim global.

0

İkinci örnekte, Python atanmadan önce test referans vermeye çalışıyor. İhtiyaçlarınıza bağlı olarak ürününü nonlocal veya global olarak bildirmeniz gerekir.

Python 2.7.9 (varsayılan 2014 10 Aralık, 12:24:55)

def test(): 
    return 1 

def go(): 
    global test 
    test = test() 
    print test 

Çıktı [MSC v: Burada

kodu değiştirilir. Win32 üzerinde 1500 32 bit (Intel)] Daha fazla bilgi için "telif hakkı", "kredi" veya "lisans()" yazın.

================================ YENİDEN =========== =====================

1 
0

sorun yerel bir değişken olarak 'test' tanımlar zaman 'gidin 'fonksiyon kapsamı fonksiyonlar namespace içinde yeni bir değişken oluşturur.So, fonksiyon içinde' test() 'çağrıldığında, global işlevi değil yerel kopyaya erişmeye çalıştı.Aşağıdaki kod çalışmalıdır.

def test(): 
    return 1 

def go(): 
    local_function_variable = test() 
    print local_function_variable 

go()