Jinsi ya kutumia na kumbuka hoja chaguo-msingi katika kazi za Python

Biashara

Kuweka hoja chaguo-msingi katika ufafanuzi wa chaguo-msingi wa Python husababisha thamani chaguo-msingi kutumika ikiwa hoja itaachwa wakati wa simu ya kukokotoa.

Maelezo yafuatayo yanaelezwa hapa chini.

  • Kuweka Hoja Chaguomsingi
  • Vikwazo kwenye nafasi ya hoja chaguo-msingi
  • Kumbuka kwamba wakati orodha au kamusi inatumiwa kama thamani chaguo-msingi

Kuweka Hoja Chaguomsingi

Ikiwa jina la hoja = thamani chaguo-msingi katika ufafanuzi wa chaguo-msingi, thamani chaguo-msingi itatumika wakati hoja inayolingana imeachwa.

def func_default(arg1, arg2='default_x', arg3='default_y'):
    print(arg1)
    print(arg2)
    print(arg3)

func_default('a')
# a
# default_x
# default_y

func_default('a', 'b')
# a
# b
# default_y

func_default('a', arg3='c')
# a
# default_x
# c

Vikwazo kwenye nafasi ya hoja chaguo-msingi

Kuweka hoja chaguo-msingi kabla ya hoja ya kawaida (hoja ambayo hakuna thamani chaguomsingi iliyobainishwa) wakati wa kufafanua chaguo-msingi kunasababisha hitilafu.
SyntaxError

# def func_default_error(arg2='default_a', arg3='default_b', arg1):
#     print(arg1)
#     print(arg2)

# SyntaxError: non-default argument follows default argument

Kumbuka kwamba wakati orodha au kamusi inatumiwa kama thamani chaguo-msingi

Ikiwa kitu kinachoweza kusasishwa (kinachoweza kubadilishwa) kama vile orodha au kamusi kimebainishwa kama thamani chaguo-msingi, kitu hicho kitaundwa kitendakazi kitakapofafanuliwa. Kisha, wakati kazi inaitwa bila hoja inayofanana, kitu sawa kinatumiwa.

Thamani za hoja chaguo-msingi hutathminiwa kutoka kushoto kwenda kulia wakati ufafanuzi wa chaguo-msingi unatekelezwa. Hii ina maana kwamba usemi wa hoja chaguo-msingi hutathminiwa mara moja tu kipengele cha kukokotoa kinapofafanuliwa, na thamani ile ile “iliyohesabiwa” inatumika kwa kila simu.
8.7. Function definitions — Python 3.10.2 Documentation

Kwa hivyo, kwa mfano, ikiwa kipengele cha kukokotoa kitafafanuliwa ambacho huchukua orodha au kamusi kama hoja yake msingi na kuongeza vipengele ndani yake, na kuitwa mara nyingi bila hoja hiyo, vipengele vitaongezwa kwa kitu kimoja mara kwa mara.

Mfano kwa tangazo.

def func_default_list(l=[0, 1, 2], v=3):
    l.append(v)
    print(l)

func_default_list([0, 0, 0], 100)
# [0, 0, 0, 100]

func_default_list()
# [0, 1, 2, 3]

func_default_list()
# [0, 1, 2, 3, 3]

func_default_list()
# [0, 1, 2, 3, 3, 3]

Mfano kwa kamusi.

def func_default_dict(d={'default': 0}, k='new', v=100):
    d[k] = v
    print(d)

func_default_dict()
# {'default': 0, 'new': 100}

func_default_dict(k='new2', v=200)
# {'default': 0, 'new': 100, 'new2': 200}

Kitu kipya huundwa kila wakati kitendakazi kinapoitwa.

def func_default_list_none(l=None, v=3):
    if l is None:
        l = [0, 1, 2]
    l.append(v)
    print(l)

func_default_list_none()
# [0, 1, 2, 3]

func_default_list_none()
# [0, 1, 2, 3]