Short-circuit Evaluation in Python

Short-circuit Evaluation in Python

เคยเห็นโค้ด Python แบบนี้ไหมฮะ

"abc" or 1 # มันจะ return "abc"
"abc" or 0 # มันก็จะ return "abc"

อันนี้มันมี 2 เรื่อง เรื่องแรกคือ implicit type conversion กับ short-circuit evaluation
Implicit type conversion ใน Python 0, ‘’, None เทียบเท่า False ส่วนตัวอื่นเทียบเทียบเท่า True
ต่อไปมาดูเรื่องของ short-circuit evaluation กัน

OR Operation
เรามาดู OR กันก่อน OR มันจะไล่ evaluate จากซ้ายไปขวา พอเจอค่าแรกที่เป็น True มันก็จะ return ค่านั้นเลย ถ้าเจอ False ก็จะไล่หาไปเรื่อย ๆ จนกว่าจะเจอ True แล้ว return ค่านั้น แต่ถ้าไล่ไปจนถึงตัวสุดท้ายแล้วยังไม่เจอ True มันก็จะ return ตัวสุดท้าย

ตัวอย่าง
1 or 2 or 3 เจอ 1 ที่เป็น True เลยตัวแรก มันก็จะ return 1 เลย
1 or 0 or 3 เจอ 1 ตัวแรกเป็น True ก็จะ return 1 เหมือนกัน
0 or 1 or 2 ตัวแรก 0 เป็น False 1 ตัวต่อไปเป็น True ก็ return 1 ออกมาเลย

AND Operation
เรามาดู AND กันบ้าง AND มันก็จะไล่ evaluate จากซ้ายไปขวา พอเจอค่าแรกที่เป็น False มันก็จะ return ค่านั้นเลย ถ้าเจอ True ก็จะไล่หาไปเรื่อย ๆ จนกว่าจะเจอ แต่ถ้าไล่ไปจนถึงตัวสุดท้ายแล้วยังไม่เจอ False มันก็จะ return ตัวสุดท้าย

ตัวอย่าง
1 and 2 and 3 ไม่เจอ False เลยจะ return 3
1 and 2 and 0 and 3 เจอ False ปุ๊บ มันก็จะ return 0 เลย

Credit: Omongo Ognomo
Reference:
https://medium.com/@mrteera/th-short-circuit-evaluation-in-python-57b71a26107a
https://docs.python.org/3/library/stdtypes.html#boolean-operations-and-or-not
https://en.wikipedia.org/wiki/Short-circuit_evaluation