Kupanua na kupitisha orodha, nakala, na kamusi kama hoja za kazi katika Python

Biashara

Katika Python, orodha (safu), nakala, na kamusi zinaweza kupanuliwa (kufunguliwa) na vipengele vyake vinaweza kupitishwa pamoja kama hoja za kazi.

Unapoita chaguo za kukokotoa, taja hoja na * ya orodha na nakala na ** kwa kamusi. Kumbuka idadi ya nyota *.

Maelezo yafuatayo yanaelezwa hapa.

  • Panua (fungua) orodha au tuple kwa * (nyota moja)
    • Kwa chaguo za kukokotoa zilizo na hoja chaguo-msingi
    • Kwa chaguo za kukokotoa zilizo na hoja za urefu tofauti
  • Panua (unpack) kamusi na ** (nyota mbili)
    • Kwa chaguo za kukokotoa zilizo na hoja chaguo-msingi
    • Kwa chaguo za kukokotoa zilizo na hoja za urefu tofauti

Tazama kifungu kifuatacho kwa utumiaji wa kimsingi wa kazi za Python, hoja chaguo-msingi, na hoja za urefu tofauti na *,** wakati wa kufafanua kazi.

Panua (fungua) orodha au tuple kwa * (nyota moja)

Orodha au nakala inapobainishwa kama hoja na *, hupanuliwa na kila kipengele hupitishwa kama hoja tofauti.

def func(arg1, arg2, arg3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

l = ['one', 'two', 'three']

func(*l)
# arg1 = one
# arg2 = two
# arg3 = three

func(*['one', 'two', 'three'])
# arg1 = one
# arg2 = two
# arg3 = three

t = ('one', 'two', 'three')

func(*t)
# arg1 = one
# arg2 = two
# arg3 = three

func(*('one', 'two', 'three'))
# arg1 = one
# arg2 = two
# arg3 = three

Maelezo yafuatayo ni ya orodha, lakini hiyo hiyo inatumika kwa tuple.

Ikiwa idadi ya vipengele hailingani na idadi ya hoja, hitilafu ya TypeError hutokea.

# func(*['one', 'two'])
# TypeError: func() missing 1 required positional argument: 'arg3'

# func(*['one', 'two', 'three', 'four'])
# TypeError: func() takes 3 positional arguments but 4 were given

Kwa chaguo za kukokotoa zilizo na hoja chaguo-msingi

Ikiwa hoja chaguo-msingi imewekwa, hoja chaguo-msingi inatumiwa ikiwa idadi ya vipengele haitoshi. Ikiwa idadi ya vipengele ni kubwa sana, hitilafu ya TypeError hutokea.

def func_default(arg1=1, arg2=2, arg3=3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

func_default(*['one', 'two'])
# arg1 = one
# arg2 = two
# arg3 = 3

func_default(*['one'])
# arg1 = one
# arg2 = 2
# arg3 = 3

# func_default(*['one', 'two', 'three', 'four'])
# TypeError: func_default() takes from 0 to 3 positional arguments but 4 were given

Kwa chaguo za kukokotoa zilizo na hoja za urefu tofauti

Ikiwa hoja ya urefu tofauti imewekwa, vipengele vyote baada ya kipengele cha hoja ya msimamo hupitishwa kwa hoja ya urefu tofauti.

def func_args(arg1, *args):
    print('arg1 =', arg1)
    print('args =', args)

func_args(*['one', 'two'])
# arg1 = one
# args = ('two',)

func_args(*['one', 'two', 'three'])
# arg1 = one
# args = ('two', 'three')

func_args(*['one', 'two', 'three', 'four'])
# arg1 = one
# args = ('two', 'three', 'four')

Panua (unpack) kamusi na ** (nyota mbili)

Amri ya kamusi inapobainishwa kama hoja na **, vitufe vya vipengele hupanuliwa kama majina ya hoja na thamani kama thamani za hoja, na kila moja hupitishwa kama hoja tofauti.

def func(arg1, arg2, arg3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

d = {'arg1': 'one', 'arg2': 'two', 'arg3': 'three'}

func(**d)
# arg1 = one
# arg2 = two
# arg3 = three

func(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three'})
# arg1 = one
# arg2 = two
# arg3 = three

Ikiwa hakuna ufunguo unaolingana na jina la hoja au kuna ufunguo ambao haulingani, hitilafu ya TypeError itatokea.

# func(**{'arg1': 'one', 'arg2': 'two'})
# TypeError: func() missing 1 required positional argument: 'arg3'

# func(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three', 'arg4': 'four'})
# TypeError: func() got an unexpected keyword argument 'arg4'

Kwa chaguo za kukokotoa zilizo na hoja chaguo-msingi

Picha ambayo ni thamani tu za majina ya hoja zinazolingana na funguo katika kamusi zinasasishwa.

Kitufe ambacho hakilingani na jina la hoja kitasababisha hitilafu ya TypeError.

def func_default(arg1=1, arg2=2, arg3=3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

func_default(**{'arg1': 'one'})
# arg1 = one
# arg2 = 2
# arg3 = 3

func_default(**{'arg2': 'two', 'arg3': 'three'})
# arg1 = 1
# arg2 = two
# arg3 = three

# func_default(**{'arg1': 'one', 'arg4': 'four'})
# TypeError: func_default() got an unexpected keyword argument 'arg4'

Kwa chaguo za kukokotoa zilizo na hoja za urefu tofauti

Ikiwa hoja za urefu tofauti zimewekwa, kipengele chochote kilicho na ufunguo mwingine isipokuwa jina la hoja iliyobainishwa kama hoja hupitishwa kwa hoja ya urefu tofauti.

def func_kwargs(arg1, **kwargs):
    print('arg1 =', arg1)
    print('kwargs =', kwargs)

func_kwargs(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three'})
# arg1 = one
# kwargs = {'arg2': 'two', 'arg3': 'three'}

func_kwargs(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three', 'arg4': 'four'})
# arg1 = one
# kwargs = {'arg2': 'two', 'arg3': 'three', 'arg4': 'four'}

func_kwargs(**{'arg1': 'one', 'arg3': 'three'})
# arg1 = one
# kwargs = {'arg3': 'three'}