ਅਤੇ ਇੱਕ ਫੰਕਸ਼ਨ ਨੂੰ ਆਰਗੂਮੈਂਟਾਂ ਨੂੰ ਸਵੀਕਾਰ ਕਰਨ ਦੀ ਅਨੁਮਤੀ ਦਿੰਦੇ ਹਨ। ਵਾਧੂ ਆਰਗੂਮੈਂਟਾਂ ਨੂੰ ਇੱਕ tuple ਵਿੱਚ ਇਕੱਠਾ ਕਰਦਾ ਹੈ; ਵਾਧੂ ਆਰਗੂਮੈਂਟਾਂ ਨੂੰ ਇੱਕ dict ਵਿੱਚ ਇਕੱਠਾ ਕਰਦਾ ਹੈ। (ਨਾਵਾਂ ਸੰਮੇਲਨ ਹਨ — ਅਤੇ ਉਹ ਹਨ ਜੋ ਮਾਇਨੇ ਰੱਖਦੇ ਹਨ।)
ਅਤੇ ਇੱਕ ਫੰਕਸ਼ਨ ਨੂੰ ਆਰਗੂਮੈਂਟਾਂ ਨੂੰ ਸਵੀਕਾਰ ਕਰਨ ਦੀ ਅਨੁਮਤੀ ਦਿੰਦੇ ਹਨ। ਵਾਧੂ ਆਰਗੂਮੈਂਟਾਂ ਨੂੰ ਇੱਕ tuple ਵਿੱਚ ਇਕੱਠਾ ਕਰਦਾ ਹੈ; ਵਾਧੂ ਆਰਗੂਮੈਂਟਾਂ ਨੂੰ ਇੱਕ 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)
ਇੱਕੋ ਸਿੰਟੈਕਸ ਇੱਕ list/dict ਨੂੰ positional/keyword arguments ਵਿੱਚ ਅਨਪੈਕ ਕਰਦਾ ਹੈ — 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 ਲਚਕਦਾਰ function signatures ਨੂੰ ਸਮਰੱਥ ਬਣਾਉਂਦੇ ਹਨ ਜੋ ਆਰਗੂਮੈਂਟਾਂ ਦੀ ਕਿਸੇ ਵੀ ਸੰਖਿਆ ਨੂੰ ਸਵੀਕਾਰ ਕਰਦੇ ਹਨ — ਆਮ-ਉਦੇਸ਼ ਉਪਯੋਗਤਾਵਾਂ, wrappers, ਅਤੇ ਖਾਸ ਤੌਰ 'ਤੇ decorators ਲਿਖਣ ਲਈ ਜ਼ਰੂਰੀ ਹਨ (ਜੋ *args, **kwargs ਦੁਆਰਾ ਅਣਜਾਣ signatures ਦੇ ਫੰਕਸ਼ਨਾਂ ਨੂੰ wrap ਕਰਨੇ ਪਏ ਹਨ)।
Unpacking direction (*list, **dict) arguments ਨੂੰ ਅੱਗੇ ਭੇਜਣ ਜਾਂ ਫੈਲਾਉਣ ਲਈ ਬਰਾਬਰ ਲਾਭਦਾਇਕ ਹੈ।
ਇਕੱਠਾ ਕਰਨ ਅਤੇ ਅਨਪੈਕ ਕਰਨ ਦੋਨਾਂ ਨੂੰ ਸਮਝਨਾ reusable, generic Python code ਲਿਖਣ ਅਤੇ ਬਹੁਤ ਸਾਰੀਆਂ library APIs ਅਤੇ decorators ਨੂੰ ਪੜ੍ਹਨ ਦੀ ਕੁੰਜੀ ਹੈ ਜੋ ਇਨ੍ਹਾਂ ਫਿਚਰਾਂ 'ਤੇ ਨਿਰਭਰ ਹਨ।