Zanurkuj w Pythonie/locals i globals: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
koniec tłumaczenia |
|||
Linia 1:
{{Podświetl|py}}
== <tt>locals</tt> i <tt>globals</tt> ==
Linia 51 ⟶ 50:
'''Przykład 8.11. Wprowadzenie do <tt>globals</tt>'''
if __name__ == "__main__":
Linia 57 ⟶ 56:
print k, "=", v
# Właściwie nie czujesz wystraszony, pamiętasz, że widzieliśmy to już wcześniej. Funkcja <tt>globals</tt> zwraca słownik, który następnie iterujemy wykorzystując metodę <tt>items</tt> i wielozmienne przypisanie. Jedyną nową rzeczą jest funkcje <tt>globals</tt>.
Teraz, uruchamiając skrypt z linii poleceń otrzymamy takie wyjście (twoje wyjście może się nieco różnić, zależnie od tego, na jakim systemie i gdzie zainstalowałeś Pythona):
c:\docbook\dip\py> python BaseHTMLProcessor.py
SGMLParser = sgmllib.SGMLParser #(1)
htmlentitydefs = <module 'htmlentitydefs' from 'C:\Python23\lib\htmlentitydefs.py'> #(2)
BaseHTMLProcessor = __main__.BaseHTMLProcessor #(3)
__name__ = __main__ #(4)
... pozostała część pominięta dla czytelności ...
# <tt>SGMLParser</tt>
#
#
#
{{Infobox|
Korzystają z funkcji <tt>locals</tt> i <tt>globals</tt> możemy pobrać dynamicznie wartość dowolnej zmiennej, dzięki przekazaniu nazwy zmiennej w postaci napisu. Funkcjonalność ta jest analogiczna do <tt>getattr</tt>, która pozwala dostać się do dowolnej funkcji, dzięki przekazaniu jej nazwy w postaci napisu.
}}
Tutaj mamy inną ważną różnicę między funkcjami <tt>locals</tt> i <tt>globals</tt>, a o których powinieneś się dowiedzieć, zanim cię ukąsi. Jakkolwiek to i tak cię ukąsi, ale przynajmniej będziesz pamiętał, że się o tym uczyłeś.
'''Przykład 8.12. <tt>locals</tt> jest tylko do odczytu, a <tt>globals</tt> już nie'''
Linia 93 ⟶ 94:
print "z=",z #(5)
#
# <tt>locals</tt> jest funkcją zwracającą słownik i w tym miejscu zmieniamy wartość w tym słowniku. Możesz myśleć, że wartość zmiennej <tt>x</tt> zostanie zmieniona na <tt>2</tt>, jednak tak nie jest. <tt>locals</tt> właściwie nie zwraca lokalnej przestrzeni nazw, zwraca jego kopię. Zatem zmieniając ją, nie zmieniamy wartości zmiennych w lokalnej przestrzeni nazw.
#
#
#
'''Przypisy'''
----
<references />
<noinclude>
|