মডিউল পাঠ (3/4)
*আর্গস এবং **কোয়ার্গস
কখনও কখনও আপনি একটি ফাংশন চান যা একটি ভেরিয়েবল সংখ্যা গ্রহণ করে
যুক্তি পাইথন আপনাকে দুটি টুল দেয়: *args (পজিশনাল আর্গুমেন্ট সংগ্রহ করে
in a tuple) এবং **kwargs (কিওয়ার্ড আর্গুমেন্টগুলিকে একটি ডিক্টে সংগ্রহ করে)।
*args: পরিবর্তনশীল অবস্থানগত আর্গুমেন্ট
def somma_tutto(*nums):
totale = 0
for n in nums:
totale += n
return totale
somma_tutto(1, 2, 3) # 6
somma_tutto(1, 2, 3, 4, 5) # 15
somma_tutto() # 0ফাংশনের ভিতরে, nums হল একটি টুপল যেখানে সমস্ত মান পাস করা হয়েছে। দ
নাম শুধুমাত্র একটি নিয়ম: *args সবচেয়ে সাধারণ, কিন্তু *nums বা
*valori পুরোপুরি বৈধ।
**kwargs: পরিবর্তনশীল কীওয়ার্ড আর্গুমেন্ট
def crea_config(**opzioni):
return opzioni
crea_config(debug=True, port=8080)
# {'debug': True, 'port': 8080}ফাংশনের ভিতরে, opzioni হল একটি ডিক্ট যার সাথে {param_name: value}।
সবকিছু একত্রিত করা
নির্দিষ্ট ক্রম হল: **নিয়মিত প্যারামিটার, **আর্গস, ডিফল্ট প্যারামিটার, **কোয়ার্গস**।
def f(primo, *args, opzione="x", **kwargs):
print(primo, args, opzione, kwargs)
f(1, 2, 3, opzione="y", extra=10)
# 1 (2, 3) y {'extra': 10}কল আনপ্যাক করা হচ্ছে: * এবং **
একই অপারেটর অন্যভাবে কাজ করে: একটি তালিকা/টুপলকে "বিস্ফোরিত" করতে অবস্থানগত আর্গুমেন্টে বা কীওয়ার্ড আর্গুমেন্টে একটি ডিক্ট।
def punto(x, y, z):
return (x, y, z)
coords = [1, 2, 3]
punto(*coords) # punto(1, 2, 3) → (1, 2, 3)
opts = {"x": 1, "y": 2, "z": 3}
punto(**opts) # punto(x=1, y=2, z=3)মোড়ানো প্যাটার্ন
def log_chiamata(fn, *args, **kwargs):
print(f"chiamo {fn.__name__} con {args=} {kwargs=}")
return fn(*args, **kwargs)
log_chiamata(max, 3, 1, 2) # calls max(3, 1, 2)
log_chiamata(sorted, [3, 1, 2], reverse=True)ফাংশন স্বাক্ষরে পরামিতি ক্রম
একাধিক আর্গুমেন্টের ধরন গ্রহণ করে এমন একটি ফাংশন সংজ্ঞায়িত করার সময়, আপনাকে অবশ্যই স্বাক্ষরে একটি কঠোর আদেশ মেনে চলতে হবে:
- স্ট্যান্ডার্ড অবস্থানগত পরামিতি।
- অবস্থানগত ভারার্গ
*args। - ডিফল্ট মান সহ কীওয়ার্ড প্যারামিটার।
- কীওয়ার্ড varargs
**kwargs।
চেষ্টা করে দেখুন
`গড়(*সংখ্যা)` সংজ্ঞায়িত করুন যা পাটিগণিত গড় (সমষ্টি/গণনা) প্রদান করে। এটিকে 10, 20, 30 দিয়ে কল করুন এবং ফলাফলটি `m`-এ বরাদ্দ করুন। `m` মূল্যায়ন করুন।
ইঙ্গিত দেখান
যোগফল (সংখ্যা) / লেন (সংখ্যা)
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ব্যায়াম পর্যালোচনা করুন
ফাংশন দেওয়া `def পয়েন্ট(x, y, z): x + y + z` রিটার্ন করুন এবং dict `coords = {'x': 1, 'y': 2, 'z': 3}`, কল পয়েন্ট আনপ্যাকিং কর্ড এবং `s`-এ ফলাফল নির্ধারণ করুন। `s` মূল্যায়ন করুন।
ইঙ্গিত দেখান
পয়েন্ট (**কর্ড)
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
অতিরিক্ত চ্যালেঞ্জ
Write a function `multiply_all(*args)` that returns the product of all numbers passed as arguments. If no arguments are passed, it should return `1`. Finally, evaluate the call `multiply_all(2, 3, 4)`.
ইঙ্গিত দেখান
a for loop ব্যবহার করুন args-এর উপাদানগুলির উপর পুনরাবৃত্তি করতে এবং তাদের পণ্য সংগ্রহ করতে।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ