Python *args and **kwargs

Python *args এবং **kwargs শিখুন

Python *args এবং **kwargs

ডিফল্টরূপে, সঠিক সংখ্যক আর্গুমেন্ট সহ একটি ফাংশন কল করা আবশ্যক।

যাইহোক, কখনও কখনও আপনি জানেন না কতগুলি আর্গুমেন্ট আপনার ফাংশনে পাস করা হবে।

*argsএবং**kwargsফাংশন অজানা সংখ্যক আর্গুমেন্ট গ্রহণ করার অনুমতি দেয়।

*args

Arbitrary Arguments

অবস্থানের আর্গুমেন্টের একটি অজানা সংখ্যা গ্রহণ করে

def func(*args)

**kwargs

Arbitrary Keyword Arguments

একটি অজানা সংখ্যক মূল আর্গুমেন্ট গ্রহণ করে

def func(**kwargs)

মনে রাখবেন:ফাংশনের সংজ্ঞায় আর্গুমেন্ট সংগ্রহ করতে এবং ফাংশন কলে আর্গুমেন্ট আলাদা করতে *args এবং **kwargs ব্যবহার করুন।

Arbitrary Arguments - *args

আপনি যদি না জানেন যে আপনার ফাংশনে কতগুলি আর্গুমেন্ট পাস করা হবে, তাহলে a এর সাথে প্যারামিটার নামের উপসর্গ দিন*যোগ করুন

এইভাবে, ফাংশনটি প্রচুর আর্গুমেন্ট পায় এবং সেই অনুযায়ী আইটেমগুলি অ্যাক্সেস করে:

উদাহরণ

def my_function(*kids):
  print("The youngest child is " + kids[2])

my_function("Emil", "Tobias", "Linus")

Arbitrary Argumentsবেশিরভাগ পাইথন ডকুমেন্টেশনে*argsহিসাবে সংক্ষিপ্ত করা হয়

*আর্গস ফাংশন প্রবাহ:

1
ফাংশন কল:
my_function("Emil", "Tobias", "Linus")
2
আর্গুমেন্ট সংগ্রহ করা হয়:
সব যুক্তিkidsএকটি টুপল মধ্যে সংগ্রহ করা হয়
3
ভিতরের ফাংশন:
kids = ("Emil", "Tobias", "Linus")
4
উপসংহার:
kids[2] = "Linus" → "The youngest child is Linus"

*আর্গস কি?

*argsপ্যারামিটার একটি ফাংশনকে যেকোনো সংখ্যক অবস্থানগত আর্গুমেন্ট গ্রহণ করতে দেয়।

ফাংশনের মধ্যে,argsসমস্ত পাস করা আর্গুমেন্ট সমন্বিত একটি টিপল প্রদান করে:

উদাহরণ

def my_function(*args):
  print("Type:", type(args))
  print("First argument:", args[0])
  print("Second argument:", args[1])
  print("All arguments:", args)

my_function("Emil", "Tobias", "Linus")
কল
my_function("E", "T", "L")
* ভিতরে args
("E", "T", "L")
টুপলে রূপান্তরিত

💡গুরুত্বপূর্ণ নোট:

*আর্গস নামে একটি কাঠামো। আপনি যেকোনো নাম ব্যবহার করতে পারেন (যেমন, *বাচ্চাদের, *নাম, *মান), কিন্তু *আর্গস হল প্রস্তাবিত কনভেনশন।

সাধারণ আর্গুমেন্টের সাথে *আর্গ ব্যবহার করা

আপনি *args দিয়ে স্বাভাবিক পরামিতি সংযুক্ত করতে পারেন।

সাধারণ পরামিতি অবশ্যই *args এর আগে আসতে হবে:

উদাহরণ

def my_function(greeting, *names):
  for name in names:
    print(greeting, name)

my_function("Hello", "Emil", "Tobias", "Linus")
যুক্তি:
"Hello", "Emil", "Tobias", "Linus"
বিভক্ত:
greeting = "Hello"
names = ("Emil", "Tobias", "Linus")

এই উদাহরণে, "হ্যালো"।greetingবরাদ্দ করা হয়, এবং বাকিnamesমধ্যে সংগ্রহ করা হয়

*আর্গ সহ ব্যবহারিক উদাহরণ

আপনি যখন নমনীয় ফাংশন তৈরি করতে চান তখন আর্গস দরকারী:

যেকোনো সংখ্যার মানের যোগফল

def calculate_sum(*numbers):
  total = 0
  for num in numbers:
    total += num
  return total

print(calculate_sum(1, 2, 3))        # 6
print(calculate_sum(10, 20, 30, 40)) # 100
print(calculate_sum(5))             # 5

সর্বোচ্চ মান খোঁজা

def find_max(*numbers):
  if len(numbers) == 0:
    return None
  max_num = numbers[0]
  for num in numbers:
    if num > max_num:
      max_num = num
  return max_num

print(find_max(3, 7, 2, 9, 1))  # 9
print(find_max())              # None

স্ট্রিং সংযুক্ত করার ফাংশন

def join_strings(*words, separator=" "):
  return separator.join(words)

print(join_strings("Hello", "World"))           # Hello World
print(join_strings("Python", "is", "awesome"))  # Python is awesome
print(join_strings("a", "b", "c", separator="-")) # a-b-c

Arbitrary Keyword Arguments - **kwargs

যদি আপনি না জানেন যে আপনার ফাংশনে কতগুলি মূল আর্গুমেন্ট পাঠানো হবে, দুটি তারকাচিহ্ন পরামিতি নামের আগে**যোগ করুন

এইভাবে, ফাংশন আর্গুমেন্টের একটি অভিধান পায় এবং সেই অনুযায়ী আইটেমগুলি অ্যাক্সেস করতে পারে:

উদাহরণ

def my_function(**kid):
  print("His last name is " + kid["lname"])

my_function(fname = "Tobias", lname = "Refsnes")

Arbitrary Keyword Argumentsবেশিরভাগ পাইথন ডকুমেন্টেশনে**kwargsহিসাবে সংক্ষিপ্ত করা হয়

** kwargs কি?

**kwargsপ্যারামিটার একটি ফাংশনকে যেকোন সংখ্যক কী আর্গুমেন্ট গ্রহণ করতে দেয়।

ফাংশনের মধ্যে,kwargsসমস্ত পাস করা মূল আর্গুমেন্ট ধারণকারী একটি অভিধানে পরিণত হবে:

উদাহরণ

def my_function(**myvar):
  print("Type:", type(myvar))
  print("Name:", myvar["name"])
  print("Age:", myvar["age"])
  print("All data:", myvar)

my_function(name = "Tobias", age = 30, city = "Bergen")
কল
name="Tobias", age=30, city="Bergen"
**কোয়ার্গের ভিতরে
{"name": "Tobias", "age": 30, "city": "Bergen"}
অভিধানে রূপান্তরিত

স্বাভাবিক আর্গুমেন্ট সহ **কোয়ার্গ ব্যবহার করা

আপনি স্বাভাবিক পরামিতিগুলিকে **kwargs-এর সাথে একত্রিত করতে পারেন।

সাধারন পরামিতি অবশ্যই **kwargs এর আগে আসবে:

উদাহরণ

def my_function(username, **details):
  print("Username:", username)
  print("Additional details:")
  for key, value in details.items():
    print("  ", key + ":", value)

my_function("emil123", age = 25, city = "Oslo", hobby = "coding")

🔑** কোয়ার্গের সুবিধা:

1. নমনীয় API- পরিবর্তন ছাড়াই নতুন কী যোগ করা যেতে পারে
2. তথ্য প্যাকেজ- সম্পর্কিত ডেটা এক জায়গায় রাখুন
3. উন্নয়ন গ্রেডিয়েন্ট- প্রতিক্রিয়ার জন্য প্রতিক্রিয়াশীল নতুন বৈশিষ্ট্য যুক্ত করুন

**কোয়ার্গের সাথে ব্যবহারিক উদাহরণ

ব্যবহারকারীর প্রোফাইল কার্যকারিতা

def create_user_profile(username, **user_info):
  profile = {"username": username}
  profile.update(user_info)
  return profile

user1 = create_user_profile("john_doe", 
                         age=30, 
                         city="New York",
                         occupation="Engineer")

user2 = create_user_profile("jane_smith",
                         age=25,
                         city="London")

print(user1)
print(user2)

এইচটিএমএল উপাদান তৈরি

def create_html_element(tag, content, **attributes):
  attr_string = ""
  for key, value in attributes.items():
    attr_string += f' {key}="{value}"'
  return f'<{tag}{attr_string}>{content}</{tag}>'

# আবেদন
div = create_html_element("div", "Hello World", 
                        class_="container", 
                        id="main",
                        style="color: blue;")
print(div)  # <div class="container" id="main" style="color: blue;">Hello World</div>

*আর্গ এবং **কোয়ার্গ উভয়ের সমন্বয়

আপনি একই ফাংশনে *args এবং **kwargs উভয়ই ব্যবহার করতে পারেন।

অর্ডারটি নিম্নরূপ হওয়া উচিত:

1
সাধারণ পরামিতি
def func(regular1, regular2, ...)
2
*আর্গস (অবস্থান আর্গুমেন্ট)
def func(..., *args, ...)
3
**কোয়ার্গস (মূল যুক্তি)
def func(..., **kwargs)

উদাহরণ

def my_function(title, *args, **kwargs):
  print("Title:", title)
  print("Positional arguments:", args)
  print("Keyword arguments:", kwargs)

my_function("User Info", "Emil", "Tobias", age = 25, city = "Oslo")
কল
"User Info", "Emil", "Tobias", age=25, city="Oslo"
বিভক্ত:
title = "User Info"
args = ("Emil", "Tobias")
kwargs = {"age": 25, "city": "Oslo"}

আনপ্যাকিং আর্গুমেন্ট

* এবং ** অপারেটরগুলি ফাংশন কল করার সময় একটি তালিকা বা অভিধানকে পৃথক আর্গুমেন্টে বিভক্ত (প্রসারিত) করতে ব্যবহার করা যেতে পারে।

* এর সাথে তালিকা বিভক্ত করা

def my_function(a, b, c):
  return a + b + c

numbers = [1, 2, 3]

#বিচ্ছেদ
result = my_function(*numbers)  # আমার_ফাংশনের মতো (1, 2, 3)।
print(result)  # 6

# বিভক্ত (ত্রুটি)
# ফলাফল = আমার_ফাংশন(সংখ্যা) # ত্রুটি!

** দিয়ে অভিধান বিভক্ত করা

def my_function(fname, lname):
  print("Hello", fname, lname)

person = {"fname": "Emil", "lname": "Refsnes"}

#বিচ্ছেদ
my_function(**person)  # আমার_ফাংশনের মত(fname="Emil", lname="Refsnes")।

# বিভক্ত (ত্রুটি)
# আমার_ফাংশন(ব্যক্তি) # ত্রুটি!

⚠️গুরুত্বপূর্ণ নোট:

ফাংশন সংজ্ঞায় আর্গুমেন্ট সংগ্রহ করতে এবং ফাংশন কলে আর্গুমেন্ট আলাদা করতে * এবং ** ব্যবহার করুন।

বিচ্ছেদের ব্যবহারিক উদাহরণ

ডেটা স্থানান্তরের জন্য বিভাজন

# বিভিন্ন উত্স থেকে ডেটা
basic_info = {"name": "Alice", "age": 30}
contact_info = {"email": "alice@example.com", "phone": "123-456-7890"}

def create_user(name, age, email, phone):
  return {
    "full_name": name,
    "years_old": age,
    "contact": {"email": email, "phone": phone}
  }

# একাধিক অভিধান একত্রিত করুন এবং বিভক্ত করুন
combined = {**basic_info, **contact_info}
user = create_user(**combined)
print(user)

*আর্গ সহ কলিং ফাংশন

# একই ফরম্যাটে একাধিক ফাংশন কল করুন
def multiply(a, b, c):
  return a * b * c

def add(a, b, c):
  return a + b + c

# একই যুক্তি ব্যবহার করুন
numbers = [2, 3, 4]
print(multiply(*numbers))  # 24
print(add(*numbers))       # 9

# আংশিক তালিকা বিভক্ত করা
first_two = [2, 3]
print(multiply(*first_two, 4))  # 24

সাধারণ ব্যবহারের ক্ষেত্রে

আবেদন *args **kwargs
গাণিতিক ফাংশন যোগফল, গড়, গুণ কোটা সহ গণনা
ডেটা প্রসেসিং পরিবর্তনশীল দৈর্ঘ্য ডেটা পরিবর্তনশীল কী সহ স্ট্রাকচার
ওয়েব ডেভেলপমেন্ট URL পাথ পরামিতি অনুরোধ
API ডিজাইন মৌলিক আর্গুমেন্ট ঐচ্ছিক বৈশিষ্ট্য
কার্যকরী ম্যাপিং কার্যকরী যুক্তি কার্যকলাপ বিকল্প

*args এবং **kwargs হল সেরা অনুশীলন

বর্ণনামূলক নাম ব্যবহার করুন:

*আর্গ এবং **কোয়ার্গের পরিবর্তে *মান এবং **বিকল্পগুলির মত নাম ব্যবহার করুন

সঠিক ক্রম অনুসরণ করুন:

1. সাধারণ পরামিতি
2. *args
3. **kwargs

অতিরিক্ত ব্যবহার করবেন না:

সমস্ত আর্গুমেন্টের জন্য *args/**kwargs ব্যবহার করবেন না। বৈধ যুক্তি সংজ্ঞায়িত করুন

ডকস্ট্রিং যোগ করুন:

*আর্গ এবং **কোয়ার্গ কি আশা করে তা নথিভুক্ত করুন

def process_data(*values, **options):
  """ ডেটা মান এবং বিকল্পগুলি প্রক্রিয়া করুন৷
  
  Args:
*মান: প্রক্রিয়া করার মান
**বিকল্প: প্রক্রিয়াকরণ বিকল্প
- পদ্ধতি: প্রক্রিয়াকরণ পদ্ধতি ('সমষ্টি', 'গড়', 'সর্বোচ্চ')
- verbose: verbose output
  """
  # ফাংশন বডি
  pass

অনুশীলন করুন

আপনার জ্ঞান পরীক্ষা করতে নিম্নলিখিত অনুশীলন চেষ্টা করুন:

কিভাবে মূল আর্গুমেন্ট প্রায়ই বলা হয়?

kwargs
✓ ঠিক আছে! Python ডকুমেন্টেশনে মূল আর্গুমেন্টগুলিকে kwargs হিসাবে সংক্ষিপ্ত করা হয়
type 2 arguments
✗ ভুল! এটি পাইথনে ব্যবহৃত একটি শব্দ নয়
B arguments
✗ ভুল! এটি পাইথনে ব্যবহৃত একটি শব্দ নয়

নিচের কোডের আউটপুট কি হবে?

def my_func(*args):
  return len(args)

print(my_func(1, 2, 3, 4, 5))
15
✗ ভুল! এটি মানগুলির সমষ্টি নয়
5
✓ ঠিক আছে! len(args) args tuple এ উপাদানের সংখ্যা প্রদান করে
(1, 2, 3, 4, 5)
✗ ভুল! এটি args tuple, len(args) নয়।

নিম্নলিখিত কোড কি কাজ করে?

def greet(**kwargs):
  for key in kwargs:
    print(key, ":", kwargs[key])

greet(name="Alice", age=25, city="New York")
সমস্ত কী-মান জোড়া প্রিন্ট করে
✓ ঠিক আছে! এটি kwargs অভিধানে সমস্ত কী এবং মান প্রিন্ট করে
একটি ত্রুটি তৈরি করবে
✗ ভুল! কোড সঠিক, কোন ত্রুটি নেই
শুধুমাত্র "এলিস" প্রিন্ট করে।
✗ ভুল! এটি সমস্ত কী-মান জোড়া প্রিন্ট করে

সারাংশ টেবিল

বৈশিষ্ট্য *args **kwargs
অর্থ Arbitrary Arguments Arbitrary Keyword Arguments
প্রতীক * (এক তারা) ** (দুই তারা)
ডেটা টাইপ টুপল অভিধান
আবেদন স্ট্যাটাস আর্গুমেন্ট মূল যুক্তি
উদাহরণ def func(*args) def func(**kwargs)
বিচ্ছেদ func(*list) func(**dict)
আবেদন পরিবর্তনশীল দৈর্ঘ্য ইনপুট পরিবর্তনশীল কী ইনপুট