ภาษาโปรแกรมหลายภาษารองรับตัวดำเนินการ ternary ซึ่งกำหนดนิพจน์เงื่อนไขโดยทั่วไป
ในทำนองเดียวกัน ternary operator ใน python ใช้เพื่อคืนค่าตามผลลัพธ์ของเงื่อนไขไบนารี ใช้ค่าไบนารี (เงื่อนไข) เป็นอินพุต ดังนั้นจึงดูเหมือนบล็อกเงื่อนไข "if-else" อย่างไรก็ตาม มันยังส่งคืนค่าที่มีลักษณะคล้ายกับฟังก์ชันอีกด้วย
ไวยากรณ์
[on_true] if [expression] else [on_false]
มาเขียนโปรแกรมง่ายๆ หนึ่งโปรแกรม ซึ่งเปรียบเทียบจำนวนเต็มสองจำนวน -
ก. การใช้คำสั่ง if-else ของ python -
>>> x, y = 5, 6 >>> if x>y: print("x") else: print("y") y
ข. การใช้โอเปอเรเตอร์ประกอบ
>>> x, y = 5, 6 >>> print("x" if x> y else "y") y
ด้วยตัวดำเนินการ ternary เราสามารถเขียนโค้ดในบรรทัดเดียวได้ ดังนั้นโดยพื้นฐานแล้ว python จะประเมินเงื่อนไขก่อน ถ้าเป็นจริง – ประเมินนิพจน์แรก มิฉะนั้นจะประเมินเงื่อนไขที่สอง
>>> def find_max(a,b): return a if (a>b) else b >>> find_max(5, 6) 6
วิธีการปรับใช้ Ternary Operator
ด้านล่างนี้คือวิธีต่างๆ ในการใช้งาน ternary operator
ก. การใช้ Python Tuples
>>> a, b = random(), random() >>> (b, a) [a>b] 0.5497848117028667
ด้านบนเทียบเท่ากับ -
>>> (b, a) [True] 0.5065247098746795
แต่ถ้าคุณสับสนกับค่าที่ส่งคืนคือ 'a' หรือ 'b' มาเขียนโค้ดด้านบนใหม่กันเถอะ
>>> (f"b:{b}", f"a:{a}") [a>b] 'b:0.5497848117028667'
ข. การใช้พจนานุกรม Python
>>> a, b = random(), random() >>> {False: f"b:{b}", True: f"a:{a}"}[a>b] 'a:0.8089581560973976'
เราสามารถแลกเปลี่ยนคู่คีย์-ค่าได้ -
>>> {True: f"a:{a}", False: f"b:{b}"}[a>b] 'a:0.8089581560973976'
ค. การใช้แลมบ์ดา
เราสามารถใช้ฟังก์ชัน python lambda เพื่อทำหน้าที่เป็นตัวดำเนินการ ternary -
>>> (lambda: f"a:{a}", lambda: f"b:{b}")[a>b]() 'b:0.6780078581465793'
โอเปอเรเตอร์ ternary Python ที่ซ้อนกัน
มาลองโยงโอเปอเรเตอร์เหล่านี้กัน -
>>> from random import random >>> x = random() >>> "Less than zero" if x<0 else "between 0 and 5" if a>=0 and a<=5 else "Greather than five"
ผลลัพธ์
'between 0 and 5'
มาตรวจสอบค่าที่แท้จริงของ x -
>>> x 0.08009251123993566