Scope Hakkında (Global - Non-Local)

def scope_test():
    def do_local():
        spam = "local spam"
        
    def do_nonlocal():
        nonlocal spam
        spam = "nonlocal spam"
        
    def do_global():
        global spam
        spam = "global spam"

    spam = "test spam"
    do_local()
    print("After local assignment:", spam)
    do_nonlocal()
    print("After nonlocal assignment:", spam)
    do_global()
    print("After global assignment:", spam)


scope_test()
print("In global scope:", spam)

Merhaba arkadaşlar bu örnekte do_global() fonksiyonundan sonra neden hala “nonlocal spam” spam yazığını anlayamadım. Bir açıklayabilir misiniz buradaki global ifadesinden sonra neden “global spam” yazmadığını?
Ekran Çıktısı:
sonuc

method içerisinde çağırdığın için sanırım nonlocal spami yazıyor. scope_test() methodunu çağırdıktan sonra hemen altına print(spam) yazarsan global spam’i yazacaktır.

scope_test() fonksiyonunun dışında yeni bir spam değişkeni tanımlanıyor ve değiştiriliyor. ve bu en sonda print("In global scope:", spam) ile yazdırılıyor. diğer bütün spam değişkenleri (print işlemleri ve manupülasyonlar) scope_test() fonksiyonunun içerisinde gerçekleşiyor.

ek:
yazdığınız kodu pythontutor.com adresinde simule edebilirsiniz. Bu iş için biçilmiş kaftan.