วิธีใช้ Python Tternary Operator

เผยแพร่แล้ว: 2023-01-04

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

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

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

เอาล่ะ!

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

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

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

 if condition: # do this else: # do this

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

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

  • ถ้า energy <= 0 game_over จะเป็น True
  • มิ game_over เป็นเท็จ

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

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

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

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

python-ternary-operator-1

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

 expression1 if condition else expression2

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

  • condition : เงื่อนไขที่จะตรวจสอบ
  • expression1 : นิพจน์ที่ใช้ประเมินว่าเงื่อนไขเป็นจริงหรือไม่
  • expression2 : นิพจน์สำหรับประเมินว่าเงื่อนไขเป็น False หรือไม่

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

ternary-op-ex1

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

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

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

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

  • ถ้า numVisits > 7 เปอร์เซ็นต์ discount_perc คือ 20
  • มิฉะนั้น discount_perc คือ 5

เราใช้ตัวดำเนินการ 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_name[1] แสดงองค์ประกอบที่สองในทูเพิล

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

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

  • bool(0) เป็น False
  • bool(<any non-zero integer>) คืนค่า True
 >>> bool(0) False >>> bool(1) True >>> bool(-1) True >>> bool(10) True

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

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

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

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

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

 >>> 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 1 ที่สอดคล้องกับคีย์ True จะได้รับการประเมินหาก condition นั้นเป็น True และ expression2 จะถูกประเมินเมื่อ condition เป็น 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 เสมอหรือไม่

คุณควรใช้ Python Tternary 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 ถ้า energy ลดลงถึงค่าที่น้อยกว่าหรือเท่ากับศูนย์

อย่างไรก็ตาม หาก energy มีค่ามากกว่าศูนย์ ตัวแปร 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 ต้องการนิพจน์ที่จะได้รับการประเมินเมื่อ condition เป็น False

 game_over = True if energy <= 0 else False

หากคุณเปลี่ยนส่วนด้านบนเป็น game_over = True if energy <= 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