மற்றும் ஒரு function-ஐ arguments-ஐ ஏற்க அனுமதிக்கின்றன. கூடுதல் arguments-ஐ ஒரு tuple-ஆக சேகரிக்கிறது; கூடுதல் arguments-ஐ ஒரு dict-ஆக சேகரிக்கிறது. (பெயர்கள் ஒரு மரபு மட்டுமே — மற்றும் தான் முக்கியம்.)
மற்றும் ஒரு function-ஐ arguments-ஐ ஏற்க அனுமதிக்கின்றன. கூடுதல் arguments-ஐ ஒரு tuple-ஆக சேகரிக்கிறது; கூடுதல் arguments-ஐ ஒரு dict-ஆக சேகரிக்கிறது. (பெயர்கள் ஒரு மரபு மட்டுமே — மற்றும் தான் முக்கியம்.)
*args**kwargs*args**kwargs***def total(*args): # collects all positional args into a tuple
print(args) # e.g. (1, 2, 3)
return sum(args)
total(1, 2, 3) # 6
total(1, 2, 3, 4, 5) # 15 — any number of args
def configure(**kwargs): # collects keyword args into a dict
print(kwargs) # e.g. {"host": "localhost", "port": 8080}
for key, value in kwargs.items():
print(f"{key} = {value}")
configure(host="localhost", port=8080, debug=True)
def func(a, b, *args, **kwargs):
# a, b → required positional
# args → extra positional (tuple)
# kwargs → extra keyword (dict)
...
func(1, 2, 3, 4, x=5, y=6)
# a=1, b=2, args=(3, 4), kwargs={"x": 5, "y": 6}
தேவையான வரிசை: வழக்கமான params, பிறகு *args, பிறகு **kwargs.
# `*` and `**` also UNPACK collections INTO arguments at the call site
numbers = [1, 2, 3]
total(*numbers) # same as total(1, 2, 3)
settings = {"host": "x", "port": 80}
configure(**settings) # same as configure(host="x", port=80)
அதே syntax ஒரு list/dict-ஐ positional/keyword arguments-ஆக unpack செய்கிறது — arguments-ஐ அனுப்புவதற்கு வசதியானது.
def wrapper(*args, **kwargs):
# accept ANY arguments and pass them through unchanged
return original_func(*args, **kwargs)
இந்த pass-through pattern தான் decorators மற்றும் wrapper functions எந்த function signature-ஐயும் கையாளும் முறை.
*args/**kwargs எந்த எண்ணிக்கையிலான arguments-ஐயும் ஏற்கும் நெகிழ்வான function signatures-ஐ செயல்படுத்துகின்றன — பொது-நோக்க utilities, wrappers, மற்றும் குறிப்பாக decorators (இவை அறியப்படாத signatures கொண்ட functions-ஐ *args, **kwargs மூலம் wrap செய்ய வேண்டும்) எழுதுவதற்கு இன்றியமையாதவை.
unpacking திசையும் (*list, **dict) arguments-ஐ அனுப்புவதற்கு அல்லது விரிப்பதற்கு சமமாக பயனுள்ளது.
சேகரித்தல் மற்றும் unpacking இரண்டையும் புரிந்துகொள்வது மறுபயன்படுத்தக்கூடிய, பொதுவான Python code எழுதுவதற்கும், இந்த அம்சங்களை நம்பியிருக்கும் பல library APIs மற்றும் decorators-ஐ படிப்பதற்கும் முக்கியமானது.