Câu hỏi đơn giản và ngắn gọn. Trao đổi hai biến trong Python rất dễ dàng: a, b = b, a
. Đó là ok, tôi không có phản đối :) Nhưng tôi quan tâm làm thế nào nó hoạt động nội bộ? Liệu nó tạo ra một số biến tạm thời của chính nó hoặc nó là một cái gì đó thú vị hơn (tôi đặt cược như vậy)?Cách hoán đổi biến hoạt động trong nội bộ?
17
A
Trả lời
31
Mã nguồn Python được chuyển thành bytecode trước khi được thực thi. Bạn có thể thấy cách hoán đổi các công trình trong nội bộ bằng cách sử dụng các bộ phận phân tách dis
để xem những gì các bytecode trông giống như:
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
Trong thuật ngữ đơn giản, nó đẩy các giá trị của a và b trên stack, xoay (swaps) hàng đầu hai yếu tố, sau đó bật lại các giá trị.
Xem thêm:
Các vấn đề liên quan
- 1. Biến XOR hoán đổi hoạt động như thế nào?
- 2. Cách Intent hoạt động nội bộ?
- 3. hoán đổi đoạn trong một hoạt động thông qua hoạt hình
- 4. Biến đổi MSBuild web.config không hoạt động
- 5. hoán đổi nguyên tử với CAS (sử dụng nội dung đồng bộ hóa gcc)
- 6. Cách thức hoạt động của arrow-> overload trong nội bộ C++?
- 7. Vị trí hoán đổi hoạt ảnh của hai nút
- 8. Làm thế nào asp.net Bundling hoạt động nội bộ
- 9. Hoán đổi nguyên tử trong GNU C++
- 10. Biến đổi CSS 3D hoạt động một cách ngẫu nhiên trong Chrome 16
- 11. Làm cách nào để chú thích hoạt động trong nội bộ
- 12. Có tích hợp chức năng hoán đổi trong C không?
- 13. mã hoán đổi nóng tại lua
- 14. Change Xem nội dung trong hoạt động tự động
- 15. Cách sửa đổi nội dung giả trong hoạt động chính/chi tiết của Android?
- 16. Java: Tại sao phương thức hoán đổi này không hoạt động?
- 17. Hoán đổi Pythonic?
- 18. Hoán đổi biến có và không có biến phụ - nhanh hơn?
- 19. Hoán đổi đối tượng bằng cách sử dụng con trỏ
- 20. Chức năng hoán đổi đơn giản ... tại sao cái này không hoán đổi?
- 21. Hoán đổi Endianness trong mục tiêu-C?
- 22. Cách tạo động một biến cục bộ?
- 23. Cách hoán đổi chỉ số giá trị trong NSArray
- 24. cách hoán đổi hình ảnh trên canvas trong android?
- 25. Hoán đổi giá trị cột trong MySQL
- 26. php sửa đổi biến toàn cục không hoạt động
- 27. Cách chính xác để "hoán đổi" một thành phần trong Java
- 28. Có thể viết phương thức hoán đổi trong Java không?
- 29. Cách giải quyết và lời gọi phương thức hoạt động nội bộ bằng Python?
- 30. Tích phân Byte hoán đổi trong C++
Awesome! Vì vậy, lừa là ROT_TWO ... Cảm ơn bạn rất nhiều! –