Python có hai đối tượng dựng sẵn này (trong số những thứ khác). Chúng chỉ là đồ vật; ban đầu, họ chưa có tên, nhưng để biết chúng tôi nói gì, hãy gọi cho họ 0x600D
và 0xBAD
.
Trước khi bắt đầu thực hiện một (2.x) kịch bản Python, tên True
bị ràng buộc với đối tượng 0x600D
, và tên False
bị ràng buộc với đối tượng 0xBAD
, vì vậy khi chương trình đề cập đến True
, nó nhìn vào 0x600D
.
Vì 0x600D
và 0xBAD
biết rằng họ thường được sử dụng bởi các tên True
và False
, đó là những gì họ ra khi họ nhận được in, ví dụ: các __str__
phương pháp 0x600D
lợi nhuận 'True'
và vân vân.
True = False
giờ đây gắn với tên True
cho một đối tượng khác. Từ bây giờ, cả hai tên True
và False
đều đề cập đến cùng một đối tượng 0xBAD
, trong đó, khi được in, xuất ra False
.
True = True
không thực sự làm bất cứ điều gì: Phải mất đối tượng được gọi bằng cái tên True
, và liên kết mới (và cũ) tên True
đến đối tượng này. Vì (vì bước trước) True
đề cập đến 0xBAD
trước đó, nó vẫn đề cập đến 0xBAD
sau này. Do đó, in vẫn xuất ra False
.
True = not True
đầu tiên diễn các đối tượng mà tên True
là ràng buộc để, đó là 0xBAD
. Nó đưa đối tượng này cho toán tử not
. not
không quan tâm (hoặc biết) tên nào được sử dụng ở đây để tham chiếu đến 0xBAD
, nó chỉ biết rằng khi được cung cấp 0xBAD
, nó sẽ trả lại 0x600D
.Giá trị trả lại này sau đó được trao cho toán tử gán =
, gắn tên True
vào đối tượng này.
Kể từ khi tên True
bây giờ một lần nữa đề cập đến đối tượng 0x600D
, gọi print True
kết quả đầu ra True
và thế giới lại tốt.
Mà không phải là tốt đùa cũ '#define đúng false' hành động ở đây? – Amarghosh
Trong phiên bản 3, Assigment True = False làm tăng lỗi sintax, vì vậy tôi cho rằng câu hỏi của bạn đề cập đến phiên bản 2 – jab
điều gì lạ về nó? cẩn thận để xây dựng? – ghostdog74