ตัวดำเนินการเชิงตรรกะของ Python และหรือและไม่ใช่ (การรวมเชิงตรรกะ การแตกแยก การปฏิเสธ)

ธุรกิจ

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ลำดับความสำคัญของตัวดำเนินการ

ลำดับความสำคัญของตัวดำเนินการเชิงตรรกะเหล่านี้มีดังนี้: ไม่ใช่ค่าสูงสุด

  1. not
  2. and
  3. 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)

ค่าส่งคืนของ และ และ หรือ สรุปไว้ในตารางด้านล่าง

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

ไฟฟ้าลัดวงจร (การประเมินไฟฟ้าลัดวงจร)

ดังที่คุณเห็นจากตารางด้านบน หาก 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