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হিসাবে সংক্ষিপ্ত করা হয়
*আর্গস ফাংশন প্রবাহ:
my_function("Emil", "Tobias", "Linus")
সব যুক্তি
kidsএকটি টুপল মধ্যে সংগ্রহ করা হয়kids = ("Emil", "Tobias", "Linus")
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")
("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 উভয়ই ব্যবহার করতে পারেন।
অর্ডারটি নিম্নরূপ হওয়া উচিত:
def func(regular1, regular2, ...)
def func(..., *args, ...)
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
অনুশীলন করুন
আপনার জ্ঞান পরীক্ষা করতে নিম্নলিখিত অনুশীলন চেষ্টা করুন:
কিভাবে মূল আর্গুমেন্ট প্রায়ই বলা হয়?
নিচের কোডের আউটপুট কি হবে?
def my_func(*args):
return len(args)
print(my_func(1, 2, 3, 4, 5))
নিম্নলিখিত কোড কি কাজ করে?
def greet(**kwargs):
for key in kwargs:
print(key, ":", kwargs[key])
greet(name="Alice", age=25, city="New York")
সারাংশ টেবিল
| বৈশিষ্ট্য | *args | **kwargs |
|---|---|---|
| অর্থ | Arbitrary Arguments | Arbitrary Keyword Arguments |
| প্রতীক | * (এক তারা) | ** (দুই তারা) |
| ডেটা টাইপ | টুপল | অভিধান |
| আবেদন | স্ট্যাটাস আর্গুমেন্ট | মূল যুক্তি |
| উদাহরণ | def func(*args) |
def func(**kwargs) |
| বিচ্ছেদ | func(*list) |
func(**dict) |
| আবেদন | পরিবর্তনশীল দৈর্ঘ্য ইনপুট | পরিবর্তনশীল কী ইনপুট |