I tutaj jest moje pytanie: dlaczego po wywołaniu funkcji doglobal() i sprintowaniu w linijce 19 w outpucie dostajemy:
After global assignment: nonlocal spam? Czy nie powinno być 'After global assignment: global spam' skoro mamy deklarację globalną zmiennej spam?
W pythontutorze pokazuje to tak jakby została stworzona zmienna spam = "global spam" w obrębie modułu ale poza funkcją scopetest() a w obrębie tej funkcji działała wciąż zmienna spam = "nonlocal spam" przypisana dzięki funkcji do_nonlocal().
Trochę chaotycznie napisałem ale mam nadzieję, że byłby skłonny ktoś mnie naprowadzić. Dlaczego tak się dzieje?
@ja_po_film_xD: "Zakres leksykalny, który jest pokazany w tym przykładzie, działa tylko dla przestrzeni nazw funkcji. Wyobraź sobie, że miałoby to działać w klasie — wtedy wszystkie metody klasy byłyby w stanie uzyskać dostęp do atrybutów klasy bezpośrednio, zamiast przez parametr self lub nazwę klasy, gdy rzeczy faktycznie działają.
Innymi słowy, przestrzeń nazw klasy nie wprowadza otaczającego zakresu dla metod w klasie, co również uniemożliwia nielokalnym znajdowanie powiązań na poziomie treści klasy."
Czas spożyć trunek. Czysta, do odcięcia. Od grudnia raz w tygodniu. Nie, to nie pomaga, ale zagłusza myśli, wszystko zmienia w jednostajny szum, szum pustki.
https://pastebin.com/9cRk5GmF
I tutaj jest moje pytanie: dlaczego po wywołaniu funkcji doglobal() i sprintowaniu w linijce 19 w outpucie dostajemy:
After global assignment: nonlocal spam? Czy nie powinno być 'After global assignment: global spam' skoro mamy deklarację globalną zmiennej spam?
W pythontutorze pokazuje to tak jakby została stworzona zmienna spam = "global spam" w obrębie modułu ale poza funkcją scopetest() a w obrębie tej funkcji działała wciąż zmienna spam = "nonlocal spam" przypisana dzięki funkcji do_nonlocal().
Trochę chaotycznie napisałem ale mam nadzieję, że byłby skłonny ktoś mnie naprowadzić. Dlaczego tak się dzieje?
#python
Komentarz usunięty przez autora
Innymi słowy, przestrzeń nazw klasy nie wprowadza otaczającego zakresu dla metod w klasie, co również uniemożliwia nielokalnym znajdowanie powiązań na poziomie treści klasy."
@ja_po_film_xD: Więc tak:
tam masz:
19. print("After global assignment:", spam)
Ta zmienna spam to jest ta sama, która jest w linijce:
13. spam = "test spam"
Ale ta zmienna z linijki 13 została wcześniej zamieniona w funkcji:
def dononlocal():
nonlocal spam
spam = "nonlocal spam"
I tutaj chodziło o pokazanie, że jak