186
Rozdział 4.
Kolej na Sarę
Prezentacja semantyki „wywołania przez referencję”
Sara niezrażona pozornym zwycięstwem Tomka usiadła do komputera i przejęła
kontrolę nad klawiaturą, aby przeprowadzić swoje próby w powłoce. Poniżej raz jeszcze
przedstawiliśmy kod naszego modułu w oknie edycji środowiska IDLE, a w nim —
funkcję Sary gotową do działania.
To zachowanie
jest dziwne.
Sposób działania funkcji Tomka jasno wskazuje, że mamy do czynienia z semantyką wywołania
przez wartość, podczas gdy przykład zastosowania funkcji Sary wyraźnie demonstruje wywołanie
przez referencję.
Jak to możliwe? Co się tu dzieje? Czy język Python korzysta z
obydwu tych sposobów
przekazywania argumentów?
Moduł
mystery.py
Funkcja
Tomka
Funkcja Sary
>>> numbers = [ 42, 256, 16 ]
>>> change(numbers)
Przed: [42, 256, 16]
Po: [42, 256, 16, ‘Więcej danych’]
>>> numbers
[42, 256, 16, ‘Więcej danych’]
Korzystając
z tej samej listy,
co Tomek, Sara
wywołuje swoją
funkcję change.
Zobacz, co się stało! Tym
razem wartość argumentu
została zmieniona zarówno
w funkcji, jak i w powłoce.
Wydaje się to sugerować,
że funkcje Pythona
korzystają RÓWNIEŻ
z semantyki wywołania
przez referencję.
Sara wprowadziła kilka wierszy kodu po znaku zachęty
>>>
wiersza poleceń powłoki Pythona,
po czym rozsiadła się w fotelu i powiedziała do Tomka: „Cóż, jeśli Python korzysta wyłącznie
z wywołań przez wartość, jak wytłumaczysz to, co się tu dzieje?”. Tomek zaniemówił.
Przyjrzyj się pokazanym poniżej operacjom wykonanym przez Sarę w wierszu poleceń powłoki.
Get Python Rusz głową! Wydanie II now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.