آیا زبان پایتون عملگر سه گانه شرطی دارد؟

  • آخرین بروزرسانی پرسش در کاپ کد در سه‌شنبه 14 آوریل 2020

اگر پایتون اپراتور سه گانه شرطی نداره، آیا امکان شبیه سازی اون از طریق ساختار های دیگه وجود داره؟

پرسش امتیازی🔝
تعداد بازدید 1869128
امتیاز 5880👍
رای 5897👍
📅 پرسش در
📅 آخرین ویرایش

برای این پرسش 4 پاسخ وجود دارد

4

بله، این اپراتور در ورژن 2.5 اضافه شد. سینتکس دستور به این صورته:

a if condition else b

در ابتدا condition ارزیابی می شه و سپس a یا b بررسی میشه و بر اساس مقدار Boolean مشخص شده از بررسی conditionبازگشت (return) داده میشه. اگر condition به صورت True ارزیابی بشه، در این صورت a اجرا و بازگشت داده میشه و از اجرای b صرف نظر میشه و برعکس

مثال :

>>> 'true' if True else 'false'
'true'
>>> 'true' if False else 'false'
'false'

میتونی از این عبارت شرطی برای انتصاب مقدار برای متغیر استفاده کنی:

x = a if True else b

امتیاز 6874👍

پاسخ تایید شده
📅 پاسخ در
📅 آخرین ویرایش

از روی مستندات:

عبارت های شرطی (بعضی موقع تحت عنوان "اپراتور سه گانه" شناخته می شود) در بین اپراتور های پایتون کمترین اولویت را دارد.

عبارت x if C else y در ابتدا شرط را ارزیابی می کند، C (نه x); اگر C درست باشد، x ارزیابی می شود و مقدار آن برگشت داده می شود؛ در غیر این صورت y ارزیابی می شود و مقدارش برگشت داده می شود.

برای آگاهی از جزئیات بیشتر عبارت های شرطی PEP 308 رو ببین.

 

امتیاز 155👍

📅 پاسخ در
📅 آخرین ویرایش

برای نسخه های قبل 2.5، یک ترفند هست:

[expression] and [on_true] or [on_false]

در زمانی که on_true مقدار بولین false داره، ممکنه نتیجه اشتباه بشه.

البته خوبیش اینه که عبارت ها رو از چپ به راست ارزیابی می کنه که به نظر من واضح تره.

امتیاز 334👍

📅 پاسخ در
📅 آخرین ویرایش

میتونی داخل یک tuple ایندکس کنی:

(falseValue, trueValue)[test]

test باید  True یا False برگردونه.

شاید ایمن تر باشه که همیشه به این صورت پیاده سازی بشه:

(falseValue, trueValue)[test == True]

یا میتونی از تابع bool() برای اطمینان از این که مقدار برگشتی Boolean هست، استفاده کنی.

(falseValue, trueValue)[bool(<expression>)]

امتیاز 777👍

📅 پاسخ در
📅 آخرین ویرایش
برای دنبال کردن نوشته های کاپ کد به کانال تلگرامی آن (cupcode_ir@) بپیوندید!

دیدگاه خود را بیان کنید

@