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