Python จัดเตรียมตัวดำเนินการเชิงตรรกะเพื่อดำเนินการเชิงตรรกะ (บูลีน)(and
,or
,not
)
ใช้เพื่ออธิบายความสัมพันธ์ระหว่างหลายเงื่อนไขในคำสั่ง if
ส่วนนี้จะอธิบายสิ่งต่อไปนี้
- จุดตัด:
and
- เพิ่มตรรกะ:
or
- ปฏิเสธ:
not
and
,or
,not
ลำดับความสำคัญของตัวดำเนินการ
นอกจากนี้ ประเด็นต่อไปนี้จะอธิบายไว้เป็นข้อควรระวัง
- ตัวดำเนินการเชิงตรรกะสำหรับวัตถุประเภทอื่นที่ไม่ใช่ bool
and
,or
ค่าที่ส่งกลับเหล่านี้ไม่จำเป็นต้องเป็นประเภทบูล- ไฟฟ้าลัดวงจร (การประเมินไฟฟ้าลัดวงจร)
จุดตัด:and
และส่งกลับผลคูณเชิงตรรกะของสองค่า
print(True and True)
# True
print(True and False)
# False
print(False and True)
# False
print(False and False)
# False
อันที่จริง มักใช้ไม่ใช่สำหรับจริงหรือเท็จ แต่สำหรับนิพจน์เงื่อนไขโดยใช้ตัวดำเนินการเปรียบเทียบ สำหรับข้อมูลของคุณ ตัวดำเนินการเปรียบเทียบมีดังนี้
<
>
a = 10
print(0 < a)
# True
print(a < 100)
# True
print(0 < a and a < 100)
# True
และสามารถต่อยอดได้ดังนี้
print(0 < a < 100)
# True
เพิ่มตรรกะ:or
หรือส่งคืนตรรกะ OR ของทั้งสองค่า
print(True or True)
# True
print(True or False)
# True
print(False or True)
# True
print(False or False)
# False
ปฏิเสธ:not
not” คืนค่าการปฏิเสธของค่า จริงและเท็จจะกลับรายการ
print(not True)
# False
print(not False)
# True
and,or,notลำดับความสำคัญของตัวดำเนินการ
ลำดับความสำคัญของตัวดำเนินการเชิงตรรกะเหล่านี้มีดังนี้: ไม่ใช่ค่าสูงสุด
not
and
or
ในโค้ดตัวอย่างต่อไปนี้ นิพจน์ด้านบนจะถูกตีความราวกับว่าเป็นนิพจน์ด้านล่าง เนื่องจากไม่มีปัญหากับวงเล็บเพิ่มเติม จึงอาจอธิบายให้ชัดเจนได้ง่ายขึ้นในกรณีเช่นตัวอย่างนี้
print(True or True and False)
# True
print(True or (True and False))
# True
หากคุณต้องการดำเนินการหรือก่อนหน้านั้น ให้ใช้วงเล็บ ()
print((True or True) and False)
# False
<
,>
ตัวดำเนินการเปรียบเทียบเหล่านี้มีความสำคัญมากกว่าเดิม ดังนั้น วงเล็บจึงไม่จำเป็นสำหรับการดำเนินการเปรียบเทียบแต่ละครั้ง ดังเช่นในตัวอย่างด้านบน
print(0 < a and a < 100)
# True
ดูเอกสารอย่างเป็นทางการด้านล่างสำหรับสรุปลำดับความสำคัญของตัวดำเนินการใน Python
ตัวดำเนินการเชิงตรรกะสำหรับวัตถุประเภทอื่นที่ไม่ใช่ bool
With these logical operators, not only bool types (true, false), but also numbers, strings, lists, etc. are processed as boolean values.
ออบเจ็กต์ต่อไปนี้ถือเป็นเท็จในการดำเนินการเชิงตรรกะของ Python
- ค่าคงที่ที่กำหนดให้เป็นเท็จ:
None
,false
- ศูนย์ในประเภทตัวเลข:
0
,0
,0j
,Decimal(0)
,Fraction(0, 1)
- ลำดับหรือคอลเลกชันที่ว่างเปล่า:
'
,()
,[]
,{}
,set()
,range(0)
ค่าอื่นๆ ทั้งหมดถือเป็นจริง
ฟังก์ชัน bool() สามารถใช้เพื่อรับค่าบูลีนของวัตถุ โปรดทราบว่าสตริง ‘0’ หรือ ‘False’ ถือเป็นจริง
print(bool(10))
# True
print(bool(0))
# False
print(bool(''))
# False
print(bool('0'))
# True
print(bool('False'))
# True
print(bool([]))
# False
print(bool([False]))
# True
ในการจัดการ ‘0’ หรือ ‘false’ ในสตริงว่าเป็นเท็จ ให้ใช้ distutils.util.strtobool()
and,orค่าที่ส่งกลับเหล่านี้ไม่จำเป็นต้องเป็นประเภทบูล
ต่อไปนี้คือตัวอย่างของอ็อบเจ็กต์ที่ไม่ใช่ประเภทบูล โดยแสดงผลของตัวดำเนินการแต่ละตัวเป็นค่าตัวเลข
x = 10 # True
y = 0 # False
print(x and y)
# 0
print(x or y)
# 10
print(not x)
# False
ดังที่คุณเห็นจากตัวอย่างด้านบน และ และ หรือใน Python จะไม่คืนค่า true หรือ false ของประเภท bool แต่คืนค่าทางซ้ายหรือขวา ขึ้นอยู่กับว่าเป็นจริงหรือเท็จ ตัวอย่างเป็นตัวเลข แต่ประเภทอื่นๆ เช่น สตริงและรายการจะเหมือนกัน อนึ่ง ไม่คืนค่าจริงหรือเท็จของประเภทบูล
คำจำกัดความของค่าส่งคืนของ และ และ หรือ มีดังต่อไปนี้
The expression x and y first evaluates x; if x is false, its value is returned; otherwise, y is evaluated and the resulting value is returned.
The expression x or y first evaluates x; if x is true, its value is returned; otherwise, y is evaluated and the resulting value is returned.
6.11. Boolean operations — Expressions — Python 3.10.1 Documentation
เมื่อค่าของนิพจน์ซ้ายและขวาเป็นจริงและเท็จ ค่าที่ส่งกลับจะเข้าใจได้ง่าย ในทางกลับกัน หากทั้งคู่เป็นจริงหรือทั้งคู่เป็นเท็จ มูลค่าที่ส่งคืนจะแตกต่างกันไปตามคำสั่งซื้อ
หากคุณใช้เป็นนิพจน์เงื่อนไขในคำสั่ง if เป็นต้น ผลลัพธ์จะถูกพิจารณาว่าเป็นค่าบูลีนและประมวลผล ดังนั้นคุณไม่ต้องกังวลกับมัน แต่ถ้าคุณใช้ค่าส่งคืนสำหรับการประมวลผลต่อไป คุณจะ ต้องระวัง
x = 10 # True
y = 100 # True
print(x and y)
# 100
print(y and x)
# 10
print(x or y)
# 10
print(y or x)
# 100
x = 0 # False
y = 0.0 # False
print(x and y)
# 0
print(y and x)
# 0.0
print(x or y)
# 0.0
print(y or x)
# 0
print(bool(x and y))
# False
หากคุณต้องการปฏิบัติต่อว่าจริงหรือเท็จ คุณสามารถทำได้ตามตัวอย่างที่แล้วbool(x and y)
ค่าส่งคืนของ และ และ หรือ สรุปไว้ในตารางด้านล่าง
x | y | x and y | x or y |
---|---|---|---|
true | false | y | x |
false | true | x | y |
true | true | y | x |
false | false | x | y |
ไฟฟ้าลัดวงจร (การประเมินไฟฟ้าลัดวงจร)
ดังที่คุณเห็นจากตารางด้านบน หาก x เป็นเท็จใน x และ y หรือหาก x เป็นจริงใน x หรือ y ผลตอบแทนที่ได้จะเป็น x โดยไม่คำนึงถึงค่าของ y
ในกรณีเช่นนี้ y จะไม่ถูกประเมิน
and
,or
โปรดทราบว่าหากคุณเรียกใช้ฟังก์ชันหรือเมธอดทางด้านขวาของกระบวนการเหล่านี้เพื่อทำการประมวลผล กระบวนการอาจไม่ถูกดำเนินการ ทั้งนี้ขึ้นอยู่กับผลลัพธ์ทางด้านซ้าย
def test():
print('function is called')
return True
print(True and test())
# function is called
# True
print(False and test())
# False
print(True or test())
# True
print(False or test())
# function is called
# True