Pagsusulat ng kung ang mga pahayag sa isang linya kasama ang ternary operator ng Python (conditional operator)

Negosyo

Ang Python ay may istilo ng pagsulat na tinatawag na mga ternary operator (conditional operator) na maaaring maglarawan ng isang proseso tulad ng isang if statement sa isang linya.

Ang mga sumusunod ay ipinaliwanag dito, kasama ang sample code.

  • Pangunahing pagsulat ng mga operator ng ternary
  • if ... elif ... else ...Ilarawan ito sa isang linya
  • Pinagsasama-sama ang Listahan ng Comprehensive Notation at Ternary Operator
  • Kumbinasyon ng mga anonymous na function (lambda expression) at ternary operator

Tingnan ang sumusunod na artikulo para sa karagdagang impormasyon sa normal na kung pahayag.

Pangunahing pagsulat ng mga operator ng ternary

Sa Python, ang ternary operator ay maaaring isulat bilang mga sumusunod

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

Kung gusto mong lumipat ng mga halaga ayon sa mga kundisyon, isulat lang ang bawat halaga kung ano ito.

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

Kung gusto mong ilipat ang pagproseso ayon sa mga kundisyon, ilarawan ang bawat expression.

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

Ang mga expression na hindi nagbabalik ng isang halaga (mga expression na nagbabalik ng Wala) ay katanggap-tanggap din. Depende sa kondisyon, ang isa sa mga expression ay sinusuri at ang proseso ay isinasagawa.

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

Katumbas ng sumusunod na code na nakasulat na may normal na if statement.

a = 1

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

Ang maramihang mga conditional na expression ay maaari ding pagsamahin gamit ang mga lohikal na operator (at, o, atbp.).

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 ...Isang linyang paglalarawan

if ... elif ... else ...Walang espesyal na paraan para isulat ito sa isang linya. Gayunpaman, ito ay maisasakatuparan sa pamamagitan ng paggamit ng isa pang ternary operator sa expression na sinusuri kapag ang conditional expression ng ternary operator ay mali. Larawan ng mga nesting ternary operator.

Gayunpaman, maaaring pinakamahusay na huwag gamitin ito nang husto dahil binabawasan nito ang pagiging madaling mabasa.

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

Ang sumusunod na conditional expression ay maaaring bigyang-kahulugan sa sumusunod na dalawang paraan, ngunit itinuturing bilang ang dating (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 

Ang isang konkretong halimbawa ay ang mga sumusunod. Ang unang expression ay itinuturing na parang ito ang pangalawa.

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

Pinagsasama-sama ang Listahan ng Comprehensive Notation at Ternary Operator

Ang isang kapaki-pakinabang na paggamit ng ternary operator ay kapag nagpoproseso ng mga listahan sa notasyon ng pag-unawa sa listahan.

Sa pamamagitan ng pagsasama-sama ng ternary operator at list comprehension notation, posibleng palitan ang mga elemento ng isang listahan o magsagawa ng iba pang pagproseso depende sa mga kundisyon.

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]

Para sa higit pang impormasyon sa notasyon sa pag-unawa sa listahan, tingnan ang sumusunod na artikulo.

Kumbinasyon ng mga anonymous na function (lambda expression) at ternary operator

Ang ternary operator, na maaaring ilarawan nang maigsi kahit sa isang hindi kilalang function (lambda expression), ay kapaki-pakinabang.

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

print(get_odd_even(1))
# odd

print(get_odd_even(2))
# even

Tandaan na, bagama’t hindi nauugnay sa ternary operator, ang halimbawa sa itaas ay nagtatalaga ng pangalan sa lambda expression. Samakatuwid, ang mga tool sa awtomatikong pagsusuri tulad ng coding convention ng Python na PEP8 ay maaaring makabuo ng Babala.

Ito ay dahil inirerekomenda ng PEP8 ang paggamit ng def kapag nagtatalaga ng mga pangalan sa mga function.

Ang konsepto ng PEP8 ay ang mga sumusunod

  • Ang mga expression ng Lambda ay ginagamit upang ipasa ang mga matatawag na bagay bilang mga argumento, halimbawa, nang hindi pinangalanan ang mga ito
  • Sa mga expression ng lambda, gamitin ang def upang tukuyin ang pangalan