Skip to main content

[Python] *args vs **Kwargs

পাইথনে ফাংশন আর্গুমেন্ট *args ও **kwargs

আমরা মাঝে মাঝেই পাইথনের ফাংশনের প্যারামিটার হিসাবে *args, ** kwargs কে দেখতে পাই । তো এগুলো আসলে কি ? এবং এগুলো কিভাবে কাজ করে ? এই দুইটা বুঝতে হলে প্রথমে আমাদের আর্গুমেন্ট কি সেটা বুঝতে হবে ।

আর্গুমেন্ট

কোন ফাংশন কল করার সময় আমার ফাংশনে যে ভেলু pass করি করি সেটা কে বলা হয় আর্গুমেন্ট । পাইথনে দুই ধরনের আর্গুমেন্ট আছে,
  1. Keyword Argument.
  2. Positional Argument.

Keyword Argument

যে সকল আর্গুমেন্টের সাথে তার আইডেন্টিফায়ার থাকে সেসব আর্গুমেন্ট কে keyword argument বলে । উদাহরণ দিলে পরিষ্কার হয়ে যাবে। মনে করেন আমাদের এইরকম একটা ফাংশন আছে,
def get_info(name = None, age = '21'):
return name, age;
name, age = get_info(name = "Arif", age = 24)
print("Name:", name)
print("Age: ", age)
Output:
Name: Arif
Age: 24
view raw kw-1.py hosted with ❤ by GitHub

উপরে আমরা ৪ নং লাইনে ফাংশন কল করার সময় যে দুইটা আর্গুমেন্ট pass করলাম সেটাকে বলা হয় keyword argument. এখানে name = 'Arif' এ name এবং age = 24 এর age আর্গুমেন্ট দুইটির আইডেন্টিফায়ার । কারণ name, age দিয়ে আমরা আলাদা ভাবে দুইটা আর্গুমেন্টকে আইডেন্টিফাই করতে পারছি ।

Positional Argument

যে আর্গুমেন্ট গুলো keyword argument না সেগুলো কে positional argument বলে । এই ধরনের আর্গুমেন্টের কোন আইডেন্টিফায়ার থাকে না । উদাহরণ,
def get_info(name, age):
return name, age;
name, age = get_info("Arif", 24)
print("Name:", name)
print("Age: ", age)
Output:
Name: Arif
Age: 24
view raw kw-2.py hosted with ❤ by GitHub

লক্ষণ করেন, এখানে আর্গুমেন্ট কে আইডেন্টিফাই করার জন্য কোন নাম সেট করা হয় নি । শুধু আর্গুমেন্টের ভেলু পাঠানো হয়েছে । এই ধরনের আর্গুমেন্টকে positional argument বলা হয় ।

এখন আমরা *arags, **kwargs ব্যাখ্যা করব । প্রথমেই বলে রাখি আমার args, kwargs এর পরিবর্তে যেকোনো নাম ব্যবহার করতে পারি । এখানে শুধু * (astric char) টা গুরুত্বপূর্ণ । আপনি ইচ্ছা করলে *variable, **variables ব্যবহার করতে পারেন । *arags, **kwargs এটা হল নামকরনের রীতিনীতি । প্রোগ্রামিং এর ভাষায় যাকে বলে naming convension. *arags এবং **kwargs ফাংশনের ডেফিনেসনে ব্যবহার করা হয় ।

মনে করেন আপনার এমন একটা ফাংশন দরকার সেটা তে আপনি যেকোনো সংখ্যক আর্গুমেন্ট pass করতে পারেন অর্থাৎ A function that acceptes variable lenght argument । এই ধরনের ফাংশন লিখতে গেলে আপনাকে *arags, **kwargs ব্যবহার করতে হবে ।

*args এর ব্যবহার

আপনার ফাংশনের আর্গুমেন্ট গুলো যদি non keyword আর্গুমেন্ট অর্থাৎ positional argument হয় সেক্ষেত্রে আপনি *args ব্যবহার করবেন । নিচে একটা উদাহরণ দেখেন তাহলে বিষয়টা পরিষ্কার হয়ে যাবে ।
def variable_lenghts_argument_function(normal_argument, *argv):
print("Normal argument is: ", normal_argument)
for argument in argv:
print("Argument pass by *argv is: ", argument)
variable_lenghts_argument_function("Language", "Python", "Java", "C/C++")
Output:
Normal argument is: Language
Argument pass by *argv is: Python
Argument pass by *argv is: Java
Argument pass by *argv is: C/C++
view raw kw-3.py hosted with ❤ by GitHub

উপরে আমরা নর্মাল আরগুমেত বাদে ৩ টা আর্গুমেন্ট পাঠিয়েছি । আমরা *args দিয়ে N সংখ্যক আর্গুমেন্ট পাঠাতে পারব ।

**kwargs এর ব্যবহার

আমাদের আর্গুমেন্ট গুলো positional argument না হয়ে যদি keyword argument হয় তাহলে আমাদের কে **kwargs ব্যবহার করতে হবে । নিচে একটা উদারহরন দেখি,
def test_kwargs_argument(**kwargs):
for key, value in kwargs.items():
print("Argument pass by **kwargs is: %s = %s" % (key, value))
test_kwargs_argument(name = "Arif", age = 21, department = "ETE") # call the function
Output:
Argument pass by **kwargs is: age = 21
Argument pass by **kwargs is: department = ETE
Argument pass by **kwargs is: name = Ari
view raw kw-4.py hosted with ❤ by GitHub

অর্থাৎ আমারা বলতে পারি **kwargs দিয়ে আমরা আর্গুমেন্টের ডিকশনারি কে কোন ফাংশনে পাস করতে পারি । *args ও **kwargs আরও বিভিন্ন ভাবে ব্যবহার করা যায় নিচে তার কিছু উদাহরণ দেয়া হল,
# using *args
args = ("Hello", 1, 2, 3) # set the argument list
variable_lenghts_argument_function(*args) # call the function with the argument
Output:
Normal argument is: Hello
Argument pass by *argv is: 1
Argument pass by *argv is: 2
Argument pass by *argv is: 3
# using **kwargs
kwargs = {"name" : "Arif", "age" : 21, "department" : "CSE"} # set argument.
test_kwargs_argument(**kwargs) # call the function with the argument.
Output:
Argument pass by **kwargs is: age = 21
Argument pass by **kwargs is: department = CSE
Argument pass by **kwargs is: name = Arif
view raw kw-5.py hosted with ❤ by GitHub

এখন আমরা যদি একই ফাংশনে *args, **kwargs ব্যবহার করতে চাই তবে আমাদের কে একটা অর্ডার ফলো করতে হবে । যদি কোন নর্মাল আর্গুমেন্ট থাকে তবে সেটাকে প্রথমে রাখতে হবে, তারপর থাকবে *args এর পরে থাকবে **kwargs
def my_function(normal_arg, *args, **kwargs)

এই সম্পর্কে আপনি আরও জানতে চাইলে পাইথনে অফিশিয়াল ওয়েবসাইট দেখতে পারেন ।

More on define function 

Comments

Popular posts from this blog

উবুন্টুতে রুট পাসওয়ার্ড ভুলে তা রিকভার করার উপায় ।

যদি কেউ রুট পাসওয়ার্ড ভুলে যান তাহলে নিচের কাজ গুলো করে নতুন পাসওয়ার্ড সেট করতে পারবেন: প্রথমে পিসি রিস্টার্ট দিন । দিয়ে UP/DOWN করে kernel version সিলেক্ট করে e চাপুন । ব্ল্যাক Screen আসবে এবার একটা Space দিয়ে লিখুন “Single” [ Enter ] এরপর b চাপুন ফলাফল : লিনাক্সের Single user Mood এ চলে আসছেন । এখন লিখুন passwd root [ Enter ] এখন নতুন পাসওয়ার্ড খানা টাইপ করেন [ এন্টার ] আবার টাইপ করেন [ এন্টার ] কাজ শেষ , এবার reboot টাইপ করেন । এখন নতুন পাসওয়ার্ড দিয়ে লগইন করেন। পুনশ্চ : যদি আপনার উইন্ডোজ এর সাথে ডুয়েল বুট করা থাকে তবে এই প্রক্রিয়া কাজ করবে না ।

Fix The BIOS in this system is not fully ACPI compliant in Windows 7

এই সমস্যা সমাধান করার জন্য আপনি নিচের ধাপ গুলো অনুসরণ করুন। ধাপ ১ :  আপানর  কম্পিউটার এ উইন্ডোজ এর ডিস্ক থেকে বুট করুন । নীচের মত উইন্ডো আসলে Shift + F10 চাপুন । এর ফলে কমান্ড প্রম্প্ট ওপেন হবে। ধাপ ২ : এখন CMD তে নিচের কমান্ড গুলি ধারবাহিক ভাবে লিখুন C: bootrec /FixMbr bootrec /FixBoot bootrec /RebuildBcd exit  এখানে  C হলো যে ড্রাইভ এ উইন্ডোজ দেয়া আছে।  আপনার যদি অন্য কোনো ড্রাইভ ( D, E, F, ..... ) এ উইন্ডোজ দেয়া থাকে তবে আপনাকে C এর জায়গায় সেই ড্রাইভ এর নাম লিখতে হবে।  উপরের সব কমান্ড যদি সঠিক ভাবে বিল্ড হয় তবে আপনি আপনার কম্পিউটার রিস্টার্ট দিন।  দেখবেন আপনার সমস্যা সমাধান হয়ে গেছে :D