Bi operatora sêyem a Python (operatorê şert) di yek rêzê de nivîsandina îfadeyan

Dikan

Python xwedan şêwazek nivîsandinê ye ku jê re operatorên sêalî (operatorên şertî) tê gotin ku dikare pêvajoyek mîna daxuyaniya if-ê di yek rêzê de diyar bike.

Ya jêrîn li vir, digel koda nimûneyê, tê rave kirin.

  • Nivîsandina bingehîn a operatorên sêalî
  • if ... elif ... else ...Vê yekê bi yek rêzê vebêjin
  • Tevhevkirina Lîsteya Nîşana Berfireh û Operatorên Ternary
  • Kombînasyona fonksiyonên nenas (biwêjên lambda) û operatorên sêalî

Ji bo bêtir agahdarî li ser bêjeya normal heke, gotara jêrîn bibînin.

Nivîsandina bingehîn a operatorên sêalî

Di Python de, operatora sêalî dikare wekî jêrîn were nivîsandin

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

Heke hûn dixwazin li gorî şertan nirxan biguherînin, bi tenê her nirxê wekî ku ye binivîsin.

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

Ger hûn dixwazin li gorî şert û mercan pêvajoyê biguherînin, her biwêjê rave bikin.

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

Gotinên ku nirxek venagerînin (biwêjên ku vedigerin Tune) jî têne qebûl kirin. Li gorî şert û mercan yek ji îfadeyan tê nirxandin û pêvajo tê meşandin.

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

Wekheviya koda jêrîn a ku bi daxuyaniyek normal-ê hatî nivîsandin.

a = 1

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

Gelek bêjeyên şertî jî dikarin bi karanîna operatorên mentiqî (û, an, hwd.) ve werin girêdan.

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 ...Danasîna yek-xetê

if ... elif ... else ...Rêyek taybetî tune ku meriv vê yekê li ser yek rêzek binivîse. Lêbelê, ew dikare bi karanîna operatorek sêyemek din a di îfadeya ku tê nirxandin de dema ku îfadeya şertî ya operatora sêalî xelet be were fêhm kirin. Wêneyê operatorên sêalî yên hêlînê.

Lêbelê, dibe ku çêtirîn be ku hûn wê bi berfirehî bikar neynin ji ber ku ew xwendinê kêm dike.

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

Gotina şertî ya jêrîn dikare bi du awayên jêrîn were şîrove kirin, lê wekî ya berê (1) tê hesibandin.

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 

Mînakek konkret wiha ye. Gotina yekem wekî ya duyemîn tê hesibandin.

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

Tevhevkirina Lîsteya Nîşana Berfireh û Operatorên Ternary

Bikaranîna kêrhatî ya operatora sêalî dema ku navnîşan di navnîşana têgihîştina navnîşê de hilberandin e.

Bi berhevkirina operatora sêalî û nîşana têgihîştina navnîşê, gengaz e ku meriv hêmanên navnîşek biguhezîne an li gorî şert û mercan pêvajoyek din pêk bîne.

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]

Ji bo bêtir agahdarî li ser nîşana têgihîştina navnîşê, li gotara jêrîn binêrin.

Kombînasyona fonksiyonên nenas (biwêjên lambda) û operatorên sêalî

Operatora sêalî, ku dikare bi kurtahî di fonksiyonek nenas de jî were binav kirin (îfadekirina lambda), bikêr e.

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

print(get_odd_even(1))
# odd

print(get_odd_even(2))
# even

Bala xwe bidinê ku, her çend bi operatora sêalî re ne têkildar be jî, mînaka jorîn navek ji îfadeya lambda re destnîşan dike. Ji ber vê yekê, amûrên kontrolkirina otomatîkî yên wekî peymana kodkirinê ya Python PEP8 dibe ku Hişyariyek çêbike.

Ji ber ku PEP8 dema ku navan li fonksiyonan vedigire, karanîna defê pêşniyar dike.

Têgeha PEP8 wiha ye

  • Gotinên lambda têne bikar anîn da ku tiştên gazîkirî wekî arguman derbas bikin, mînakî, bêyî navên wan
  • Di bêjeyên lambda de, def bikar bînin da ku bi navê xwe diyar bikin