2015-02-07 7 views
6

Czytając „Wstęp do informatyki przy użyciu Pythona”, Charles Dierbach książka , mam pytanie:W jaki sposób powiązana jest nazwa i jej wartość referencyjna?

  • Na stronie 210 mówi „Odwołanie jest wartością odniesienia lub„punkty do "lokalizacji innej jednostki. Wartość referencyjną zmiennej można ustalić za pomocą wbudowanego identyfikatora funkcji."

Więc odniesienia tylko adres w pamięci obiektu.

Teraz, jeśli się nie mylę, kiedy utworzyć zmienną jak:

>>> a = 3 

Nazwa jest umieszczany automatycznie przez Pythona w nazw.

Jeśli zrobić:

>>> id(a) 
4548344816 

uzyskać adres w pamięci obiektu , ten, który odwołuje.

Więc to, co chcę wiedzieć, jak to nazwa a wartość referencyjnazwiązane.

Zgaduję, że gdy nazwa jest wprowadzane do przestrzeni nazw, to obejmuje 2 rzeczy:

  1. sama nazwa.

  2. Wartość odniesienia (identyfikator obiektu)

Para jak może: a:reference value?

Jeśli tak, czy jest jakieś narzędzie instrospekcji, aby zobaczyć, jak wygląda wpis w przestrzeni nazw?

Odpowiedz

5

Przestrzenie nazw w języku Python są zaimplementowane jako słowniki. Klucz odwzorowuje wartość, aw przestrzeni nazw klucze są identyfikatorami, a nazwy i wartości odnoszą się do obiektów, do których są przypisane nazwy.

Już znalazłeś narzędzie, które sprawia, że ​​część "referencyjna" jest widoczna, funkcja id(). Można korzystać z funkcji globals() i locals() aby uzyskać dostęp do mapowania Przestrzeń nazw

>>> a = 3 
>>> globals().keys() 
['__builtins__', '__name__', '__doc__', 'a', '__package__'] 
>>> globals()['a'] 
3 
>>> id(globals()['a']) 
4299183224 
>>> id(a) 
4299183224 

jednak pamiętać, że w zależności, lokalnej przestrzeni nazw został zoptymalizowany i słownika zwrócony przez locals() jest tylko jednokierunkowy odbiciem prawdziwa struktura, która jest po prostu tablicą C z odniesieniami. Możesz wyglądać, ale nie dotykać, poprzez to mapowanie.

Aby uzyskać więcej informacji na temat sposobu działania przestrzeni nazw w języku Python, należy uruchomić kod w pliku Online Python Tutor; pokaże ci, jak współdziałają nazwy i obiekty Pythona w pamięci.

+1

Aha, śledzę kolejną książkę Marka Lutza, "Nauka Pythona", i na stronie. 176 mówi * "zmienne i obiekty są przechowywane w różnych częściach pamięci i są powiązane przez łącza" *. Wiem, że mogę uzyskać adres obiektu z 'id()', ale czy istnieje sposób na znalezienie adresu ** nazwy **? – javi

+1

Również na następnej stronie mówi: "Zmienne są wpisami w tabeli systemowej, ze spacjami dla łączy do obiektów." * Te wpisy, do których się odnosi, są elementami słownika przestrzeni nazw. Każdy ** przedmiot ** w tym słowniku działa jak ** link **, wiążący nazwę i obiekt. Dobrze? – javi

+0

@javi: książka jest nieprecyzyjna. Obiekty klatek przechowują przestrzenie nazw, ale zarówno obiekty klatek * jak i * obiekty nazw (które są tylko obiektami ciągów) wszystkie żyją w tej samej przestrzeni pamięci. –

Powiązane problemy