วิธีใช้ Python Tternary Operator

คู่มือนี้จะสอนวิธีใช้ตัวดำเนินการ ternary ใน Python คุณจะได้เรียนรู้ไวยากรณ์และโค้ดตัวอย่างต่างๆ เพื่อทำความเข้าใจวิธีการทำงาน

เราจะเริ่มด้วยการทบทวนว่าคำสั่งเงื่อนไข if-else ทำงานอย่างไร จากนั้นเรียนรู้วิธีเขียนนิพจน์ที่เทียบเท่าโดยใช้ตัวดำเนินการ ternary

ต่อไป เราจะเขียนโค้ดตัวอย่างบางส่วน จากนั้นเรียนรู้วิธีเลียนแบบพฤติกรรมของตัวดำเนินการแบบไตรภาคของ Python โดยใช้ทูเพิลและพจนานุกรมของ Python สุดท้ายนี้ เราจะตรวจสอบกรณีการใช้งานบางกรณีที่คุณควรเลือกใช้ตัวดำเนินการแบบไตรภาค

เอาล่ะ!

คำสั่ง If-Else ใน Python: บทวิจารณ์

คุณสามารถเขียนโค้ดโดยเริ่มต้น Python REPL หรือในตัวแก้ไข Python ออนไลน์ของ admintrick.com

ไวยากรณ์ทั่วไปของคำสั่ง if-else ใน Python มีดังนี้

if condition:
    # do this
else:
    # do this

ในข้อมูลโค้ดข้างต้น เงื่อนไขหมายถึงเงื่อนไขที่จะตรวจสอบ หากเงื่อนไขประเมินเป็น True บล็อก if จะถูกทริกเกอร์ หากเงื่อนไขประเมินเป็น False คำสั่งภายในบล็อก else จะถูกดำเนินการ

ต่อไปนี้คือตัวอย่างที่ตัวแปร game_over ได้รับการกำหนดค่าบูลีนโดยขึ้นอยู่กับว่าค่าของพลังงานมีค่าน้อยกว่าหรือเท่ากับศูนย์หรือไม่

  • ถ้าพลังงาน <= 0 แสดงว่า game_over เป็น True
  • มิฉะนั้น game_over เป็นเท็จ

ข้อมูลโค้ดต่อไปนี้แสดงวิธีการใช้คำสั่งเงื่อนไข if-else:

energy = -1

if energy <= 0:
    game_over = True
else:
    game_over = False

print(game_over)
# True

ในตัวอย่างนี้ พลังงานคือ -1 ซึ่งน้อยกว่า 0 ดังนั้น game_over จึงเป็น True

Python Tternary Operator: ไวยากรณ์และตัวอย่าง

Python มีตัวดำเนินการแบบ ternary ที่ทำงานเหมือนกับตัวดำเนินการแบบมีเงื่อนไขแบบ ternary ในภาษาต่างๆ เช่น C และ C++ ไวยากรณ์ทั่วไปที่จะใช้มีดังนี้:

expression1 if condition else expression2

มาแยกวิเคราะห์ไวยากรณ์ด้านบน:

  • สภาพ: เงื่อนไขในการตรวจสอบ
  • นิพจน์ 1: นิพจน์สำหรับประเมินว่าเงื่อนไขเป็นจริงหรือไม่
  • นิพจน์ 2: นิพจน์สำหรับประเมินว่าเงื่อนไขเป็นเท็จหรือไม่

ตอนนี้ เราจะระบุว่า expression1, expression2 และเงื่อนไขใดควรมาจากโค้ดรุ่น if-else

เมื่อรวมทั้งหมดเข้าด้วยกัน เรามีสิ่งต่อไปนี้โดยใช้ตัวดำเนินการแบบไตรภาคของ Python

game_over = True if energy <= 0 else False
print(game_over)
# True

ลองเขียนโค้ดอีกตัวอย่างหนึ่ง สมมติว่าคุณเปิดร้านหนังสือและให้ส่วนลดแก่ผู้อ่านในการซื้อ โดยขึ้นอยู่กับความถี่ที่พวกเขาไปที่ร้านของคุณในช่วง 1 ปีที่ผ่านมา

ให้ numVisits แสดงจำนวนการเข้าชม

  • ถ้า numVisits > 7 เปอร์เซ็นต์ส่วนลด discount_perc คือ 20
  • มิฉะนั้น discount_perc คือ 5
  เหตุใดคุณจึงไม่ควรใช้เซิร์ฟเวอร์ DNS เริ่มต้นของ ISP

เราใช้ตัวดำเนินการ ternary เพื่อกำหนดค่าให้กับตัวแปร discount_perc

numVisits = 10

discount_perc = 20 if numVisits > 7 else 5

print(discount_perc)
# 20 (as numVisits = 10 which is > 7)

ต่อไป เราจะเรียนรู้วิธีจำลองตัวดำเนินการแบบไตรภาคโดยใช้ Python tuple และพจนานุกรม

การจำลอง Ternary Operator ด้วย Python Tuple

เช่นเดียวกับ iterables ทั้งหมดใน Python ทูเพิลตามด้วยการทำดัชนีเป็นศูนย์ ดังนั้นหากคุณมีสององค์ประกอบในทูเพิล tuple_name[0] หมายถึงองค์ประกอบแรกใน tuple และ tuple_name[1] ให้องค์ประกอบที่สองในทูเพิล

ชนิดข้อมูลพื้นฐานใน Python ได้แก่ จำนวนเต็ม จำนวนลอย สตริง และบูลีน Python รองรับการแคสติ้งประเภทที่ให้คุณแสดงประเภทข้อมูลเฉพาะด้วยการแทนค่าที่เทียบเท่าในประเภทข้อมูลอื่น

เริ่ม Python REPL และรันตัวอย่างต่อไปนี้ หากคุณลองแปลงจำนวนเต็มเป็นบูลีน คุณจะสังเกตเห็นสิ่งต่อไปนี้:

  • บูล (0) เป็นเท็จ
  • บูล (<จำนวนเต็มใด ๆ ที่ไม่ใช่ศูนย์>) คืนค่า True
>>> bool(0)
False
>>> bool(1)
True
>>> bool(-1)
True
>>> bool(10)
True

ในทำนองเดียวกัน เมื่อแปลง Boolean เป็นจำนวนเต็ม เรามีสิ่งต่อไปนี้:

>>> int(True)
1
>>> int(False)
0

เมื่อรวมการหล่อประเภทและการจัดทำดัชนีเข้าด้วยกัน เราสามารถทำได้ดังนี้:

  • องค์ประกอบที่ดัชนี 0 ในทูเพิล: ค่าที่จะใช้เมื่อเงื่อนไขเป็นเท็จ
  • องค์ประกอบที่ดัชนี 1 ในทูเพิล: ค่าที่จะใช้เมื่อเงื่อนไขเป็นจริง

จากที่กล่าวมาเรามีดังต่อไปนี้:

>>> numVisits = 10
>>> discount_perc = (5,20)[numVisits > 7]
>>> discount_perc
# 20

ที่นี่ เงื่อนไข numVisits > 7 คือ True เนื่องจาก numVisits คือ 10 เนื่องจาก int(True) คือ 1 ค่าของ discount_perc คือ 20 องค์ประกอบที่ดัชนี 1

การจำลอง Ternary Operator ด้วย Python Dictionary

คุณสามารถตั้งค่า True และ False เป็นคีย์ของพจนานุกรมได้ และคุณสามารถตั้งค่า expression1 และ expression2 เป็นค่าที่สอดคล้องกับคีย์ True และ False ตามลำดับ

some_dict = {True: expression1,
             False: expression2
            }

คุณจะทำอย่างไรต่อไป? ตอนนี้ถ้าคุณใช้ some_dict[condition], expression1 ที่สอดคล้องกับคีย์ True จะได้รับการประเมินหากเงื่อนไขเป็นจริง และ expression2 จะถูกประเมินเมื่อเงื่อนไขเป็น False

ลองโค้ดตัวอย่าง discount_perc (อีกครั้ง) แต่คราวนี้ใช้พจนานุกรม Python

>>> numVisits = 10
>>> discount_dict = {True: 20, False:5}
>>> discount_perc = discount_dict[numVisits > 7]
>>> discount_perc
# 20

ในที่นี้ numVisits = 10 ซึ่งมากกว่า 7 ดังนั้น เงื่อนไข numVisits > 7 จึงเป็น True ดังนั้น discount_dict[numVisits > 7] ประเมินเป็น discount_dict[True] ซึ่งมีค่าเท่ากับ 20

คุณควรใช้ Python Ternary Operator เสมอหรือไม่

จนถึงตอนนี้ เราได้เรียนรู้วิธีใช้ตัวดำเนินการแบบไตรภาค แต่เราควรใช้ตัวดำเนินการ ternary เสมอหรือไม่? ตัวดำเนินการ ternary อาจไม่ใช่ตัวเลือกที่ดีที่สุดสำหรับทุกกรณีการใช้งาน ส่วนนี้แบ่งย่อยเมื่อคุณควรใช้ตัวดำเนินการแบบไตรภาคมากกว่าคำสั่ง if-else นอกจากนี้ เราจะกล่าวถึงกรณีที่เราควรพิจารณาใช้คำสั่ง if-else แทนตัวดำเนินการ ternary

กระชับกว่าบล็อก If-Else

ดังที่ได้กล่าวไว้ ใน Python นิพจน์ตัวดำเนินการแบบไตรภาคนั้นกระชับกว่าคำสั่ง if-else ดังนั้น คุณจึงสามารถใช้เพื่อตรวจสอบเงื่อนไขและประเมินนิพจน์แบบมีเงื่อนไขได้ทันที

ในตัวอย่างต่อไปนี้ nums คือรายการของจำนวนเต็ม 100 จำนวนที่สร้างขึ้นแบบสุ่ม สำหรับแต่ละหมายเลข 100 เราจะตรวจสอบว่าเป็นเลขคี่หรือคู่ และการประเมินนี้เกิดขึ้นแบบอินไลน์ภายใน f-string

import random

nums = [random.choice(range(100)) for i in range(10)]

for num in nums:
    print(f"{num} is {'even' if num%2==0 else 'odd'}")
# sample output

0 is even
56 is even
6 is even
53 is odd
62 is even
7 is odd
8 is even
77 is odd
41 is odd
94 is even

ตัวดำเนินการ Ternary ต้องการส่วนอื่น

เมื่อคุณใช้คำสั่งแบบมีเงื่อนไข if-else ประโยคคำสั่ง else จะเป็นตัวเลือกหรือไม่ก็ได้ ลองมาเป็นตัวอย่าง ตัวแปร game_over ถูกตั้งค่าเป็น True ถ้าพลังงานลดลงถึงค่าที่น้อยกว่าหรือเท่ากับศูนย์

อย่างไรก็ตาม หากพลังงานมีค่ามากกว่าศูนย์ ตัวแปร game_over จะไม่ถูกเตรียมใช้งาน ดังนั้นคุณจะพบข้อผิดพลาดหากคุณพยายามเข้าถึงตัวแปร game_over

energy = 5
if energy <= 0:
    game_over = True

print(f"Is the game over? {game_over}")
Traceback (most recent call last):
  File "ternary_op.py", line 39, in <module>
    print(f"Is the game over? {game_over}")
NameError: name 'game_over' is not defined

วิธีหนึ่งในการแก้ไขปัญหานี้คือตั้งค่า game_over เป็น False ในขั้นต้นและอัปเดตเป็น True หากระดับพลังงานน้อยกว่าหรือเท่ากับศูนย์

energy = 5
game_over = False
if energy <= 0:
    game_over1 = True

print(f"Is the game over? {game_over}")

อย่างไรก็ตาม เมื่อใช้ตัวดำเนินการ ternary ของ Python ที่เทียบเท่ากับข้างต้น อนุประโยค else จะไม่บังคับ ตัวดำเนินการ ternary ต้องการนิพจน์ที่จะได้รับการประเมินเมื่อเงื่อนไขเป็นเท็จ

game_over = True if energy <= 0 else False

หากคุณเปลี่ยนส่วนด้านบนเป็น game_over = True ถ้าพลังงาน <= 0 โดยลบส่วนอื่นออก คุณจะพบข้อผิดพลาดทางไวยากรณ์ดังที่แสดง:

File "ternary_op.py", line 42
    game_over = True if energy <= 0
                                  ^
SyntaxError: invalid syntax

หากต้องการตรวจสอบหลายเงื่อนไข ให้ใช้คำสั่ง If-Else

พิจารณาตัวอย่าง: คำถามทุกข้อในชุดคำถามสัมภาษณ์การเข้ารหัสมีคะแนนความยากที่เกี่ยวข้อง ขึ้นอยู่กับคะแนนนี้ เรากำหนดหนึ่งในสามระดับความยาก: ง่าย ปานกลาง หรือยาก สำหรับคำถามเฉพาะ สมมติว่าเรามีดังต่อไปนี้:

คะแนนระดับความยากน้อยกว่า 10ง่ายระหว่าง 10 ถึง 20 ปานกลางมากกว่า 20ยาก

เมื่อพิจารณาจากคะแนนความยาก คุณสามารถรับระดับความยากได้โดยใช้ตัวดำเนินการ ternary ของ Python ดังที่แสดง:

score = 12

difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium"

print(difficulty_level)
# medium

นิพจน์ตัวดำเนินการแบบไตรภาคในบล็อกรหัสด้านบนมีรูปแบบดังต่อไปนี้:

expression1 if condition1 else expression2 if condition2 else expression3

แม้จะกระชับ แต่ก็ค่อนข้างยากที่จะอ่านและแยกวิเคราะห์ รูปภาพต่อไปนี้แสดงวิธีควบคุมโฟลว์ที่เกิดขึ้นในกรณีนี้

ข้อมูลโค้ดต่อไปนี้แสดงการใช้งานเทียบเท่าโดยใช้คำสั่ง if-else อย่างที่เห็น โฟลว์การควบคุมนั้นเข้าใจได้ง่ายกว่ามาก และโค้ดก็อ่านง่ายขึ้น

if score < 10:
    difficulty_level="easy"
elif score > 20:
    difficulty_level="hard"
else:
    difficulty_level="medium"

print(difficulty_level)

ดังนั้น เมื่อคุณมีหลายเงื่อนไข คุณควรใช้บล็อก if-else แทนตัวดำเนินการ ternary สิ่งนี้ทำให้มั่นใจได้ว่าโค้ดนั้นอ่านและเข้าใจได้ง่าย

นอกจากนี้ เมื่อคุณต้องการดำเนินการหลายคำสั่ง—ขึ้นอยู่กับว่าเงื่อนไขเป็นจริงหรือเท็จ คุณควรพิจารณาใช้คำสั่ง if-else

บทสรุป

นี่คือบทสรุปของสิ่งที่คุณได้เรียนรู้ในบทช่วยสอนนี้

  • ใน Python สามารถใช้ตัวดำเนินการ ternary กับไวยากรณ์ต่อไปนี้: expression1 if condition else expression2
  • คุณสามารถเลียนแบบพฤติกรรมของตัวดำเนินการแบบไตรภาคโดยใช้ Python tuples และ dictionaries
  • ในขณะที่ตัวดำเนินการ ternary สามารถเป็นทางเลือกที่กระชับกว่าบล็อก if-else คุณควรตรวจสอบให้แน่ใจว่าโค้ดสามารถอ่านได้ เพื่อปรับปรุงความสามารถในการอ่านโค้ด คุณสามารถใช้คำสั่ง if-else แทนตัวดำเนินการ ternary โดยเฉพาะอย่างยิ่งเมื่อคุณต้องการเชื่อมโยงหลายเงื่อนไข

ต่อไป เรียนรู้ที่จะดูบทช่วยสอนเกี่ยวกับตัวดำเนินการเท่ากับและไม่เท่ากันใน Python

เรื่องล่าสุด

x