نوشتن دستورات if در یک خط با عملگر سه تایی پایتون (عملگر شرطی)

کسب و کار

پایتون یک سبک نوشتاری به نام عملگرهای سه تایی (عملگرهای شرطی) دارد که می تواند فرآیندی مانند دستور if را در یک خط توصیف کند.

در اینجا موارد زیر به همراه کد نمونه توضیح داده شده است.

  • نوشتن اصلی عملگرهای سه تایی
  • if ... elif ... else ...این را در یک خط توصیف کنید
  • ترکیب فهرست جامع نمادگذاری و عملگرهای سه تایی
  • ترکیبی از توابع ناشناس (عبارات لامبدا) و عملگرهای سه تایی

برای اطلاعات بیشتر در مورد دستور if normal به مقاله زیر مراجعه کنید.

نوشتن اصلی عملگرهای سه تایی

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

Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false

اگر می خواهید مقادیر را با توجه به شرایط تغییر دهید، به سادگی هر مقدار را همانطور که هست بنویسید.

Value to return if conditional expression is true if conditional expression else Value to return if conditional expression is false
a = 1
result = 'even' if a % 2 == 0 else 'odd'
print(result)
# odd

a = 2
result = 'even' if a % 2 == 0 else 'odd'
print(result)
# even

اگر می خواهید پردازش را با توجه به شرایط تغییر دهید، هر عبارت را توصیف کنید.

a = 1
result = a * 2 if a % 2 == 0 else a * 3
print(result)
# 3

a = 2
result = a * 2 if a % 2 == 0 else a * 3
print(result)
# 4

عباراتی که مقداری را بر نمی‌گردانند (عباراتی که None را برمی‌گردانند) نیز قابل قبول هستند. بسته به شرایط، یکی از عبارت ها ارزیابی می شود و فرآیند اجرا می شود.

a = 1
print('even') if a % 2 == 0 else print('odd')
# odd

معادل کد زیر که با دستور if عادی نوشته شده است.

a = 1

if a % 2 == 0:
    print('even')
else:
    print('odd')
# odd

عبارات شرطی متعدد نیز می توانند با استفاده از عملگرهای منطقی (و، یا، و غیره) به هم متصل شوند.

a = -2
result = 'negative and even' if a < 0 and a % 2 == 0 else 'positive or odd'
print(result)
# negative and even

a = -1
result = 'negative and even' if a < 0 and a % 2 == 0 else 'positive or odd'
print(result)
# positive or odd

if ... elif ... else ...توضیحات یک خطی

if ... elif ... else ...روش خاصی برای نوشتن این در یک خط وجود ندارد. با این حال، می توان با استفاده از عملگر سه تایی دیگر در عبارتی که زمانی که عبارت شرطی عملگر سه تایی نادرست است، ارزیابی می شود. تصویر عملگرهای سه تایی تودرتو.

با این حال، ممکن است بهتر باشد از آن به طور گسترده استفاده نکنید زیرا خوانایی را کاهش می دهد.

a = 2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# positive

a = 0
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# zero

a = -2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# negative

عبارت شرطی زیر را می توان به دو صورت زیر تفسیر کرد، اما به عنوان حالت قبلی در نظر گرفته می شود (1).

A if condition 1 else B if condition 2 else C
1. A if condition 1 else ( B if condition 2 else C )
2. ( A if condition 1 else B ) if condition 2 else C 

یک مثال عینی به شرح زیر است. عبارت اول به گونه ای تلقی می شود که گویی دومی است.

a = -2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# negative

result = 'negative' if a < 0 else ('positive' if a > 0 else 'zero')
print(result)
# negative

result = ('negative' if a < 0 else 'positive') if a > 0 else 'zero'
print(result)
# zero

ترکیب فهرست جامع نمادگذاری و عملگرهای سه تایی

استفاده مفید از عملگر سه تایی هنگام پردازش لیست ها در نماد درک لیست است.

با ترکیب عملگر سه تایی و نماد درک لیست، می توان عناصر یک لیست را جایگزین کرد یا بسته به شرایط، پردازش دیگری را انجام داد.

l = ['even' if i % 2 == 0 else i for i in range(10)]
print(l)
# ['even', 1, 'even', 3, 'even', 5, 'even', 7, 'even', 9]
l = [i * 10 if i % 2 == 0 else i for i in range(10)]
print(l)
# [0, 1, 20, 3, 40, 5, 60, 7, 80, 9]

برای اطلاعات بیشتر در مورد نشانه گذاری درک لیست، به مقاله زیر مراجعه کنید.

ترکیبی از توابع ناشناس (عبارات لامبدا) و عملگرهای سه تایی

عملگر سه تایی، که می تواند به طور خلاصه حتی در یک تابع ناشناس (عبارت لامبدا) توصیف شود، مفید است.

get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'

print(get_odd_even(1))
# odd

print(get_odd_even(2))
# even

توجه داشته باشید که اگرچه به عملگر سه تایی ارتباطی ندارد، اما مثال بالا یک نام به عبارت لامبدا اختصاص می دهد. بنابراین، ابزارهای بررسی خودکار مانند قرارداد کدگذاری پایتون PEP8 ممکن است یک هشدار ایجاد کند.

این به این دلیل است که PEP8 استفاده از def را هنگام اختصاص نام به توابع توصیه می کند.

مفهوم PEP8 به شرح زیر است

  • عبارات لامبدا برای انتقال اشیاء قابل فراخوانی به عنوان آرگومان استفاده می شود، به عنوان مثال، بدون نامگذاری آنها
  • در عبارات لامبدا، از def برای تعریف با نام استفاده کنید
Copied title and URL