Do czego służy nonlocal
instrukcja Python (w Python 3.0 i nowszych)?
Na oficjalnej stronie Python help("nonlocal")
nie ma dokumentacji i też nie działa.
Do czego służy nonlocal
instrukcja Python (w Python 3.0 i nowszych)?
Na oficjalnej stronie Python help("nonlocal")
nie ma dokumentacji i też nie działa.
"There is no documentation for nonlocal".
W rzeczywistości możesz zrobićhelp(keyword_in_string)
dokumentację w Pythonie 3 i nowszychOdpowiedzi:
Porównaj to bez użycia
nonlocal
:Aby to zrobić, używając
nonlocal
, gdzieinner()
„sx
jest teraz takżeouter()
” sx
:źródło
Krótko mówiąc, pozwala przypisywać wartości do zmiennej w zewnętrznym (ale nie globalnym) zakresie. Zobacz PEP 3104, aby uzyskać wszystkie krwawe szczegóły.
źródło
Wyszukiwarka Google dla „python nonlocal” ujawniła propozycję, PEP 3104 , która w pełni opisuje składnię i uzasadnienie instrukcji. w skrócie, działa dokładnie tak samo jak
global
instrukcja, z tym wyjątkiem, że odnosi się do zmiennych, które nie są globalne ani lokalne dla funkcji.Oto krótki przykład tego, co możesz z tym zrobić. Licznik generatora można przepisać, aby go użyć, aby wyglądał bardziej jak idiomy języków z zamknięciami.
Oczywiście możesz napisać to jako generator, na przykład:
Ale chociaż jest to całkowicie idiomatyczny python, wydaje się, że pierwsza wersja byłaby nieco bardziej oczywista dla początkujących. Prawidłowe używanie generatorów, poprzez wywołanie zwróconej funkcji, jest częstym punktem zamieszania. Pierwsza wersja wyraźnie zwraca funkcję.
źródło
nonlocal
instrukcję w Pythonie; Jeśli chcesz sekwencję liczb naturalnych, idiom python jest w rzeczywistościitertools.count()
@ooboo:
Zajmuje jeden „najbliższy” do punktu odniesienia w kodzie źródłowym. Nazywa się to „leksykalnym ustalaniem zakresu” i jest standardem od ponad 40 lat.
Członkowie klasy Pythona tak naprawdę znajdują się w słowniku o nazwie
__dict__
i nigdy nie zostanie osiągnięty przez zakres leksykalny.Jeśli nie podasz,
nonlocal
ale zrobiszx = 7
, utworzy nową lokalną zmienną „x”. Jeśli podasznonlocal
, znajdzie „najbliższe” „x” i przypisze do tego. Jeśli podasznonlocal
i nie ma „x”, wyświetli się komunikat o błędzie.Słowo kluczowe
global
zawsze wydawało mi się dziwne, ponieważ z radością zignoruje wszystkie pozostałe „x”, z wyjątkiem najbardziej zewnętrznego. Dziwne.źródło
Źródło: Python Language Reference
źródło
help()
słów kluczowych (a teraz jestem podekscytowany:help()
bez argumentów wchodzi w interakcję ).Cytat z Python 3 Reference :
Jak wspomniano w odnośniku, w przypadku kilku zagnieżdżonych funkcji modyfikowana jest tylko zmienna w najbliższej otaczającej funkcji:
„Najbliższa” zmienna może znajdować się kilka poziomów dalej:
Ale nie może to być zmienna globalna:
źródło
źródło
Moje osobiste rozumienie instrukcji „nielokalnej” (i przepraszam, ponieważ jestem nowy w Pythonie i programowaniu w ogóle) jest takie, że „nielokalna” jest sposobem na użycie funkcji globalnej w ramach iterowanych funkcji, a nie samej treści samego kodu . Globalna instrukcja między funkcjami, jeśli chcesz.
źródło
z „nielokalnymi” funkcjami wewnętrznymi (tj. zagnieżdżonymi funkcjami wewnętrznymi) można uzyskać uprawnienia do odczytu i zapisu dla tej konkretnej zmiennej zewnętrznej funkcji rodzica . I nielokalne mogą być używane tylko wewnątrz funkcji wewnętrznych, np .:
źródło