Sa Python, ang mga listahan (mga array), tuple, at mga diksyunaryo ay maaaring palawakin (i-unpack) at ang kani-kanilang mga elemento ay maaaring ipasa nang magkasama bilang mga argumento ng function.
Kapag tumatawag sa isang function, tukuyin ang argument na may * para sa mga listahan at tuple at ** para sa mga diksyunaryo. Tandaan ang bilang ng mga asterisk *.
Ang mga sumusunod na detalye ay inilarawan dito.
- Palawakin (i-unpack) ang isang listahan o tuple na may * (isang asterisk)
- Para sa mga function na may mga default na argumento
- Para sa mga function na may variable-length na mga argumento
- Palawakin (i-unpack) ang diksyunaryo na may ** (dalawang asterisk)
- Para sa mga function na may mga default na argumento
- Para sa mga function na may variable-length na mga argumento
Tingnan ang sumusunod na artikulo para sa pangunahing paggamit ng mga function ng Python, mga default na argumento, at mga argumento ng variable na haba na may *,** kapag tinutukoy ang mga function.
- KAUGNAY:Paano gamitin at tandaan ang mga default na argumento sa mga function ng Python
- KAUGNAY:Paano gumamit ng mga argumento ng variable na haba sa Python(
*args
,**kwargs
)
Palawakin (i-unpack) ang isang listahan o tuple na may * (isang asterisk)
Kapag ang isang listahan o tuple ay tinukoy bilang isang argumento na may *, ito ay pinalawak at ang bawat elemento ay ipinapasa bilang isang hiwalay na argumento.
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
Ang sumusunod na paliwanag ay para sa isang listahan, ngunit ang parehong naaangkop sa isang tuple.
Kung ang bilang ng mga elemento ay hindi tumutugma sa bilang ng mga argumento, isang TypeError error ang nangyayari.
# 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
Para sa mga function na may mga default na argumento
Kung ang isang default na argument ay nakatakda, ang default na argumento ay ginagamit kung ang bilang ng mga elemento ay hindi sapat. Kung ang bilang ng mga elemento ay masyadong malaki, isang TypeError error ang nangyayari.
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
Para sa mga function na may variable-length na mga argumento
Kung nakatakda ang isang variable-length na argumento, ang lahat ng elemento pagkatapos ng elemento para sa positional na argumento ay ipapasa sa variable-length na argumento.
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')
Palawakin (i-unpack) ang diksyunaryo na may ** (dalawang asterisk)
Kapag ang isang diksyon ng diksyunaryo ay tinukoy bilang isang argumento na may **, ang mga key ng elemento ay pinalawak bilang mga pangalan ng argumento at mga halaga bilang mga halaga ng argumento, at bawat isa ay ipinapasa bilang isang hiwalay na argumento.
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
Kung walang key na tumutugma sa pangalan ng argumento o may key na hindi tumutugma, magreresulta ang TypeError error.
# 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'
Para sa mga function na may mga default na argumento
Larawan kung saan ang mga halaga lamang ng mga pangalan ng argumento na tumutugma sa mga susi sa diksyunaryo ang ina-update.
Ang isang susi na hindi tumutugma sa pangalan ng argumento ay magreresulta sa isang TypeError error.
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'
Para sa mga function na may variable-length na mga argumento
Kung nakatakda ang mga variable-length na argumento, anumang elemento na may key maliban sa pangalan ng argument na tinukoy bilang argument ay ipapasa sa variable-length na argumento.
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'}