মূল কন্টেন্টে যান
মডিউল 5 · 3-এর পাঠ 4কোর্সে 19/36~12 min
মডিউল পাঠ (3/4)

*আর্গস এবং **কোয়ার্গস

কখনও কখনও আপনি একটি ফাংশন চান যা একটি ভেরিয়েবল সংখ্যা গ্রহণ করে যুক্তি পাইথন আপনাকে দুটি টুল দেয়: *args (পজিশনাল আর্গুমেন্ট সংগ্রহ করে in a tuple) এবং **kwargs (কিওয়ার্ড আর্গুমেন্টগুলিকে একটি ডিক্টে সংগ্রহ করে)।

*args: পরিবর্তনশীল অবস্থানগত আর্গুমেন্ট

Python
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: পরিবর্তনশীল কীওয়ার্ড আর্গুমেন্ট

Python
def crea_config(**opzioni):
    return opzioni

crea_config(debug=True, port=8080)
# {'debug': True, 'port': 8080}

ফাংশনের ভিতরে, opzioni হল একটি ডিক্ট যার সাথে {param_name: value}।

সবকিছু একত্রিত করা

নির্দিষ্ট ক্রম হল: **নিয়মিত প্যারামিটার, **আর্গস, ডিফল্ট প্যারামিটার, **কোয়ার্গস**।

Python
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}

কল আনপ্যাক করা হচ্ছে: * এবং **

একই অপারেটর অন্যভাবে কাজ করে: একটি তালিকা/টুপলকে "বিস্ফোরিত" করতে অবস্থানগত আর্গুমেন্টে বা কীওয়ার্ড আর্গুমেন্টে একটি ডিক্ট।

Python
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)

মোড়ানো প্যাটার্ন

Python
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)

ফাংশন স্বাক্ষরে পরামিতি ক্রম

একাধিক আর্গুমেন্টের ধরন গ্রহণ করে এমন একটি ফাংশন সংজ্ঞায়িত করার সময়, আপনাকে অবশ্যই স্বাক্ষরে একটি কঠোর আদেশ মেনে চলতে হবে:

  1. স্ট্যান্ডার্ড অবস্থানগত পরামিতি।
  2. অবস্থানগত ভারার্গ *args।
  3. ডিফল্ট মান সহ কীওয়ার্ড প্যারামিটার।
  4. কীওয়ার্ড varargs **kwargs।

চেষ্টা করে দেখুন

ব্যায়াম#python.m5.l3.e1
প্রচেষ্টা: 0লোড হচ্ছে...

`গড়(*সংখ্যা)` সংজ্ঞায়িত করুন যা পাটিগণিত গড় (সমষ্টি/গণনা) প্রদান করে। এটিকে 10, 20, 30 দিয়ে কল করুন এবং ফলাফলটি `m`-এ বরাদ্দ করুন। `m` মূল্যায়ন করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

যোগফল (সংখ্যা) / লেন (সংখ্যা)

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম পর্যালোচনা করুন

ব্যায়াম#python.m5.l3.e2
প্রচেষ্টা: 0লোড হচ্ছে...

ফাংশন দেওয়া `def পয়েন্ট(x, y, z): x + y + z` রিটার্ন করুন এবং dict `coords = {'x': 1, 'y': 2, 'z': 3}`, কল পয়েন্ট আনপ্যাকিং কর্ড এবং `s`-এ ফলাফল নির্ধারণ করুন। `s` মূল্যায়ন করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

পয়েন্ট (**কর্ড)

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

অতিরিক্ত চ্যালেঞ্জ

ব্যায়াম#python.m5.l3.e3
প্রচেষ্টা: 0লোড হচ্ছে...

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 প্রচেষ্টার পরে উপলব্ধ