วิธีใช้ 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 ที่ทำงานเหมือนกับตัวดำเนินการแบบมีเงื่อนไขแบบ ternary ในภาษาต่างๆ เช่น C และ C++ ไวยากรณ์ทั่วไปที่จะใช้มีดังนี้:
expression1 if condition else expression2
มาแยกวิเคราะห์ไวยากรณ์ด้านบน:
-
condition
: เงื่อนไขที่จะตรวจสอบ -
expression1
: นิพจน์ที่ใช้ประเมินว่าเงื่อนไขเป็นจริงหรือไม่ -
expression2
: นิพจน์สำหรับประเมินว่าเงื่อนไขเป็น False หรือไม่
ตอนนี้ เราจะระบุว่า expression1
, expression2
และ condition
ใดควรมาจากโค้ดรุ่น 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
เราใช้ตัวดำเนินการ 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 เสมอหรือไม่
จนถึงตอนนี้ เราได้เรียนรู้วิธีใช้ตัวดำเนินการแบบไตรภาค แต่เราควรใช้ตัวดำเนินการ 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