SORU
16 Aralık 2008, Salı


Kapsam hata Python değişken

Yıllardır programlama yaptım, ve son zamanlarda Python öğrenmeye başladım. Aşağıdaki kodu python 2.5 ve 3.0 beklenen gibi konularda ise X işletim sistemi üzerinde çalışıyor:

a, b, c = (1, 2, 3)

print(a, b, c)

def test():
    print(a)
    print(b)
    print(c)    # (A)
    #c =1       # (B)
test()

Ben satır satır ancak(B)Alırım ., ^em>UnboundLocalError: 'c' atanmış değilçizgisinde(A). Değerleribirvebdoğru. yazdırılır Bu beni tamamen şaşkın iki nedeni vardır:

  1. Neden bir çalışma zamanı hatası satır atılır(A)çünkü bu hat üzerinde daha sonra bir açıklama(B)?

  2. Neden değişkenlerdirbirvebbeklendiği gibi, süre basılıcyükseltir bir hata mı?

Aklıma gelen tek Açıklama Buyereldeğişkencatama "ile" değişken . genel göre önceliği alır c =1, oluşturulur ^em>cdaha önce yerel bir değişken oluşturulur. Tabii ki, bir değişken "var önce." kapsam çalmak için mantıklı değil

Birisi bu davranışı açıklayabilir misiniz?

CEVAP
16 Aralık 2008, Salı


Python fonksiyonları farklı işlevi içinde onlara değer atadıktan bağlı olarak ya da değil, değişken davranır. Eğer bir değişken herhangi bir değer atarsanız, yerel bir değişken olarak varsayılan olarak kabul edilir. Satır satır, bu nedenle, herhangi bir değer atanmış önce yerel bir değişken referans için çalışıyorsunuz.

Değişken c genel c koyun bakın isterseniz

global c

işlevi ilk satırı.

3, python gibi

nonlocal c

en yakın kapsayan (değil) genel kapsam başvurmak için kullanabilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • dhcrr's channel

    dhcrr's chan

    2 Ocak 2007
  • InfinityWard

    InfinityWard

    19 EYLÜL 2006
  • WOSU Public Media

    WOSU Public

    23 AĞUSTOS 2007