এবং একটি ফাংশনকে আর্গুমেন্ট গ্রহণ করতে দেয়। অতিরিক্ত আর্গুমেন্টগুলিকে একটি 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-কে পজিশনাল/কীওয়ার্ড আর্গুমেন্টে আনপ্যাক করে — আর্গুমেন্ট ফরোয়ার্ড করার জন্য সুবিধাজনক।
def wrapper(*args, **kwargs):
# accept ANY arguments and pass them through unchanged
return original_func(*args, **kwargs)
এই পাস-থ্রু প্যাটার্নটি হল কীভাবে ডেকোরেটর এবং র্যাপার ফাংশনগুলি যেকোনো ফাংশন সিগনেচার পরিচালনা করে *args, **kwargs-এর মাধ্যমে।
*args/**kwargs নমনীয় ফাংশন স্বাক্ষর সক্ষম করে যা যেকোনো সংখ্যক আর্গুমেন্ট গ্রহণ করে — সাধারণ-উদ্দেশ্যের ইউটিলিটি, র্যাপার এবং বিশেষত ডেকোরেটর লেখার জন্য অপরিহার্য (যা *args, **kwargs-এর মাধ্যমে অজানা সিগনেচার সহ ফাংশনগুলি মোড়াতে অবশ্যই হবে)।
আনপ্যাকিং দিক (*list, **dict) আর্গুমেন্ট ফরোয়ার্ড বা ছড়িয়ে দেওয়ার জন্য সমানভাবে দরকারী।
সংগ্রহ এবং আনপ্যাকিং উভয়ই বোঝা Python কোড পুনঃব্যবহারযোগ্য, জেনেরিক লেখার জন্য এবং অনেক লাইব্রেরি API এবং ডেকোরেটর পড়ার জন্য মূল চাবিকাঠি যা এই বৈশিষ্ট্যগুলির উপর নির্ভর করে।