Python 3 kaynak kodunda bazı kapsam analizlerini gerçekleştirmeye çalışıyorum ve nonlocal deyim ifadesinin bir sınıf tanımı içinde nasıl çalıştığına bağlı kaldım.Bir sınıf tanımındaki Python olmayan deyim
Anladığım kadarıyla, sınıf tanımı vücudunu yeni bir ad alanı içinde yürütür (bunu dict olarak adlandırın) ve sınıf adını türün (ad, taban, dict) sonucuna bağlar. Yerel olmayan x, yerel dışı kapsamda bir yere bağlı bir değişkene başvurduğu sürece çalışmalıdır. Aşağıdaki kod
def A():
v = 1
class B:
nonlocal v
v = 2
kimse açıklayabilir
mükemmel çalışır ikenclass A:
v = 1
class B:
nonlocal v
v = 2
ama bu
SyntaxError: no binding for nonlocal 'v' found
başarısız:
Bundan ben derlemek ve çalıştırmak için aşağıdaki kodu bekliyoruz Burada fonksiyon tanımının kapanması ile sınıf tanımı arasındaki fark nedir?
Daha fazla araştırma - son kod örneğinde, A'daki locals() öğesi {v: 1} iken, B içerisindedir: {v: 2, ''__module__'': '' __main__'', ''__locals__'': {...}} – Andyrooger