Pytanie proste i krótkie. Zamiana dwóch zmiennych w Pythonie jest bardzo łatwa: a, b = b, a
. W porządku, nie mam zastrzeżeń :) Ale jestem zainteresowany, jak to działa wewnętrznie? Czy sam tworzy pewną tymczasową zmienną, czy jest to coś bardziej interesującego (tak się założę)?Jak wymiana zmiennych działa wewnętrznie?
17
A
Odpowiedz
31
Kod źródłowy Pythona jest konwertowany na bytecode, zanim zostanie wykonany. Można zobaczyć, jak swap działa wewnętrznie za pomocą dezasembler dis
aby zobaczyć, co kod bajtowy wygląda następująco:
import dis
>>> def f(a,b): a, b = b, a
>>> dis.dis(f)
1 0 LOAD_FAST 1 (b)
3 LOAD_FAST 0 (a)
6 ROT_TWO
7 STORE_FAST 0 (a)
10 STORE_FAST 1 (b)
13 LOAD_CONST 0 (None)
16 RETURN_VALUE
W prostych słowach, to popycha wartości A i B na stosie, obraca (swapy) top dwa elementy, a następnie ponownie wyświetla wartości.
Zobacz także:
Powiązane problemy
- 1. Jak działa LINQ wewnętrznie?
- 2. Jak działa wewnętrznie fgets?
- 3. Jak działa wiązanie asp.net Wewnętrznie
- 4. Jak routing ASP.NET działa wewnętrznie?
- 5. Jak Spring Boot Application działa wewnętrznie?
- 6. jQuery each() - jak to działa naprawdę wewnętrznie?
- 7. Jak działa telefonGap (Cordova) wewnętrznie, iOS specyficzne
- 8. W jaki sposób kursor SQLite działa wewnętrznie?
- 9. W jaki sposób serializacja java działa wewnętrznie?
- 10. W jaki sposób nazwy zmiennych są przechowywane i mapowane wewnętrznie?
- 11. Dlaczego ta zagnieżdżona wymiana makr nie działa?
- 12. Wymiana tematów a bezpośrednia wymiana w RabbitMQ
- 13. W jaki sposób EqualityComparer <T> .Default działa wewnętrznie?
- 14. W jaki sposób funkcja animacji jquery działa wewnętrznie?
- 15. Wymiana Maven?
- 16. Capistrano: zadzwoń zadanie z argumentów (wewnętrznie)
- 17. Cassandra i wtórne indeksy, jak działają wewnętrznie?
- 18. Ręczna wymiana ognia
- 19. HashMap wykorzystuje LinkedList wewnętrznie
- 20. WYMIANA znaku nowego wiersza w MYSQL nie działa
- 21. Ruby 2.0 iconv wymiana
- 22. Warunkowa wymiana w pandach
- 23. Wymiana MouseOver z .hoverIntentem
- 24. Jak wewnętrznie przechowują znaczniki czasu MySQL?
- 25. Jak wewnętrznie przekierować wywołanie laravel (bez przekierowania)?
- 26. Jak aktualizacje rekordów zachowują się wewnętrznie?
- 27. GTK + 3 StatusIcon wymiana
- 28. vim wymiana problem
- 29. Delphi: Darmowa wymiana TSynEdit
- 30. Wymiana WinRT dla System.ComponentModel.TypeConverter
Awesome! A więc sztuczka to ROT_TWO ... Dziękuję bardzo! –