Zanurkuj w Pythonie/locals i globals: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
Nie podano opisu zmian |
m uciąłem trochę tę uwagę, dotyczyła starszych wersji pythona, tłumaczenie |
||
Linia 22:
# wbudowana przestrzeń nazw namespace - globalna dla wszystkich modułów. Ponieważ jest to ostatnia deska ratunku, Python przyjmie, że <tt>x</tt> jest nazwą wbudowanej funkcji lub zmiennej.
{{Uwaga|
Python 2.2 wprowadził subtelną, a zarazem ważną zmianę, które wpływa na porządek przeszukiwania przestrzeni nazw: zagnieżdżona przestrzeń nazw (ang. ''nested scope''). W wersjach wcześniejszych niż 2.2, kiedy odwoływało się do zmiennej wewnątrz zagnieżdżonej funkcji lub funkcji lambda, Python będzie szukał tej zmiennej w bieżącej przestrzeni nazw danej funkcji (zagnieżdżonej lub lambda), a następnie w przestrzeni nazw modułu. Python 2.2 będzie szukał zmiennej w bieżącej przestrzeni nazw danej funkcji (zagnieżdżonej lub lambda), następnie w przestrzeni nazw nadrzędnej funkcji, a potem w przestrzeni nazw modułu.
}}
Zmieszałeś się? Nie panikuj! Jest to naprawdę cool. Podobnie, jak wiele rzeczy w Pythonie, przestrzenie nazw są bezpośrednio dostępne podczas wykonywania programu. Jak? Do lokalnej przestrzeni nazw mamy dostęp poprzez wbudowaną funkcję <tt>locals</tt>, a do globalna (na poziomie modułu) przestrzeń nazw jest dostępna poprzez wbudowaną funkcję <tt>globals</tt>.
'''Przykład 8.10. Wprowadzenie do <tt>locals</tt>'''
>>> def foo(arg): #(1)
Linia 43 ⟶ 41:
{'arg': 'bar', 'x': 1}
# Funkcja <tt>foo</tt> posiada dwie zmienne w swojej lokalnej przestrzeni nazw: <tt>arg</tt>, której wartość jest przekazana do funkcji, a także <tt>x</tt>, która jest zdefiniowana wewnątrz funkcji.
# <tt>locals</tt> zwraca słownik par nazwa/wartość. Kluczami słownika są nazwy zmiennej, a które są napisami. Wartościami słownika są bieżące wartości tych zmiennych. Zatem wywołując <tt>foo</tt> z 7, wypiszemy słownik zawierający dwie lokalne zmienne tej funkcji, czyli <tt>arg</tt> (o wartości <tt>7</tt>) i <tt>x</tt> (o wartości <tt>1</tt>).
# Pamiętaj, Python jest dynamicznie typowany, dlatego też możemy w prosty sposób jako argument <tt>arg</tt>, przekazać napis. Funkcja (a także wywołanie <tt>locals</tt>) będą nadal działać jak należy. <tt>locals</tt> działa z wszystkimi zmiennymi dowolnych typów danych.
What locals does for the local (function) namespace, globals does for the global (module) namespace. globals is more exciting, though, because a module's namespace is more exciting <ref>I don't get out much</ref>. Not only does the module's namespace include module-level variables and constants, it includes all the functions and classes defined in the module. Plus, it includes anything that was imported into the module.
|