Câu trả lời chính xác: Không. Python không có một toán tử tích hợp op
nào có thể dịch x = x or y
sang x op y
.
Nhưng, nó gần như không. Toán tử bitwise hoặc-equals ( |=
) sẽ hoạt động như mô tả ở trên nếu cả hai toán hạng đang được coi là boolean, với một cảnh báo. (Cảnh báo trước là gì? Tất nhiên là câu trả lời ở bên dưới.)
Đầu tiên, phần trình diễn cơ bản về chức năng:
x = True
x
Out[141]: True
x |= True
x
Out[142]: True
x |= False
x
Out[143]: True
x &= False
x
Out[144]: False
x &= True
x
Out[145]: False
x |= False
x
Out[146]: False
x |= True
x
Out[147]: True
Lưu ý là do python không được nhập đúng và do đó ngay cả khi các giá trị đang được coi là boolean trong một biểu thức, chúng sẽ không bị đoản mạch nếu được cung cấp cho toán tử bitwise. Ví dụ: giả sử chúng ta có một hàm boolean xóa danh sách và trả về True
iff có các phần tử bị xóa:
def my_clear_list(lst):
if not lst:
return False
else:
del lst[:]
return True
Bây giờ chúng ta có thể thấy hành vi đoản mạch như sau:
x = True
lst = [1, 2, 3]
x = x or my_clear_list(lst)
print(x, lst)
Output: True [1, 2, 3]
Tuy nhiên, chuyển đổi sang or
bitwise hoặc ( |
) sẽ loại bỏ ngắn mạch, do đó, hàm my_clear_list
thực thi.
x = True
lst = [1, 2, 3]
x = x | my_clear_list(lst)
print(x, lst)
Output: True []
Trên, x = x | my_clear_list(lst)
tương đương với x |= my_clear_list(lst)
.