మరియు ఒక ఫంక్షన్ను argumentsలను అంగీకరించుకోవడానికి అనుమతిస్తాయి. అదనపు argumentsలను ఒక tupleలో సేకరిస్తుంది; అదనపు argumentsలను ఒక dictలో సేకరిస్తుంది. (పేర్లు సంప్రదాయం — మరియు ముఖ్యమైనవి.)
మరియు ఒక ఫంక్షన్ను 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లలోకి విస్తరిస్తుంది — argumentsలను ఫార్వార్డ్ చేయడానికి ఉపయోగకరమైనది.
def wrapper(*args, **kwargs):
# accept ANY arguments and pass them through unchanged
return original_func(*args, **kwargs)
ఈ pass-through నమూనా decorators మరియు wrapper functionsలు తెలియని function signatureను *args, **kwargs ద్వారా ఎలా నిర్వహిస్తుందో చూపిస్తుంది.
*args/**kwargs సరళమైన function signaturesలను ఏదైనా సంఖ్యలో argumentsలను అంగీకరించుకోవడానికి — సాధారణ-ప్రయోజన utilities, wrappers, మరియు ముఖ్యంగా decorators (ఇవి *args, **kwargs ద్వారా తెలియని signaturesను wrap చేయాలి) వ్రాయడానికి ఎంపికచేయ్యడం అవసరం.
Unpacking దిశ (*list, **dict) argumentsలను ఫార్వార్డ్ చేయడం లేదా విస్తరించడానికి సమానంగా ఉపయోగకరమైనది.
సేకరించడం మరియు unpacking రెండూ అర్థం చేసుకోవడం పునర్వినియోగ వీలుకల్పితమైన, సాధారణ Python కోడ్ వ్రాయడానికి మరియు ఈ ఫీచర్లపై ఆధారపడిన అనేక library APIs మరియు decoratorsలను చదవడానికి కీలకం.