Như đã chỉ ra, "&" trong python thực hiện một phép toán và hoạt động, giống như trong C#. and
tương đương với toán tử &&
.
Kể từ khi chúng tôi đang làm việc với các dữ liệu boolean (i == 5
là True
và ii == 10
cũng là True
), bạn có thể tự hỏi tại sao điều này không hoặc làm việc anyway (True bị đối xử như một số nguyên vẫn nên có nghĩa là Đúng & Đúng là một Đúng giá trị), hoặc ném một ngoại lệ (ví dụ: bằng cách cấm các hoạt động bitwise trên các kiểu boolean)
Lý do là ưu tiên của toán tử.Các "and
" nhà điều hành liên kết lỏng lẻo hơn ==
, vì vậy các biểu hiện: "i==5 and ii==10
" tương đương với: "(i==5) and (ii==10)
"
Tuy nhiên, Bitwise &
có độ ưu tiên cao hơn "==
" (vì bạn sẽ không muốn biểu hiện như "a & 0xff == ch
" có nghĩa là "a & (0xff == ch)
"), vì vậy các biểu hiện thực sự sẽ được hiểu là:
if i == (5 & ii) == 10:
nào đang sử dụng toán tử python của chaining có nghĩa là: không valuee của ii anded với 5 bằng cả i và 10. Rõ ràng điều này sẽ không bao giờ đúng.
Bạn thực sự sẽ nhận được (dường như) câu trả lời đúng nếu bạn đã bao gồm dấu ngoặc để buộc các ưu tiên, vì vậy:
if (i==5) & (ii=10)
sẽ gây ra các tuyên bố được in. Tuy nhiên, điều sai trái là "&
" có nhiều ngữ nghĩa khác nhau cho "and
" - (ưu tiên, ngắn gọn, hành vi với các đối số nguyên vv), vì vậy thật may mắn khi bạn bắt được nó ở đây thay vì bị lừa cho đến khi nó được tạo ra lỗi ít rõ ràng hơn.
Dấu chấm phẩy hữu ích nếu chúng ta muốn kết hợp các dòng mã. – riza
Kết hợp các đường thẳng không phải là cách "nhiệt đới" mặc dù – Rodrigo
Mặc dù bạn có thể kết hợp các dòng, như Rodrigo nói, nó không phải là "pythonic". Vì trong trường hợp đặc biệt này, dấu chấm phẩy không có tác dụng gì cả, tôi đã đưa ra nhận xét về sự dư thừa của nó. Tôi cho rằng người hỏi là người mới đối với python và không muốn trả lời câu trả lời của tôi về cái gì là "pythonic" và dấu chấm phẩy nào. – Mizipzor