আপনি যদি পাইথনে সামান্য কিছু প্রোগ্রামিং করে থাকেন তবে আপনি পাইথন ফাংশনে “**আর্গস” এবং “**কোয়ার্গস” শব্দটি দেখেছেন। কিন্তু তারা ঠিক কি?
* এবং ** অপারেটররা বিভিন্ন অপারেশন করেছে যা একে অপরের পরিপূরক আমরা কোথায় ব্যবহার করছি তার উপর নির্ভর করে।
সুতরাং যখন আমরা তাদের পদ্ধতি সংজ্ঞায় ব্যবহার করি, যেমন -
def __init__(self, *args, **kwargs): pass
উপরের অপারেশনটিকে 'প্যাকিং' বলা হয় কারণ এটি সমস্ত আর্গুমেন্টকে একটি একক ভেরিয়েবলে প্যাক করে যা এই মেথড কলটি আর্গস নামক একটি টিপলে প্রাপ্ত করে। আমরা args ছাড়া অন্য নাম ব্যবহার করতে পারি, কিন্তু args হল কাজ করার সবচেয়ে সাধারণ এবং পাইথনিক উপায়। কেন একটি একক ভেরিয়েবল রাখতে হবে তা বোঝার জন্য, নীচের উদাহরণটি বিবেচনা করুন:
ধরা যাক আমাদের একটি ফাংশন আছে যা তিনটি আর্গুমেন্ট নেয় এবং আমাদের কাছে সাইজ 3 এর একটি তালিকা রয়েছে যাতে ফাংশনের জন্য সমস্ত আর্গুমেন্ট রয়েছে। এখন যদি আমরা কেবল ফাংশনে তালিকা পাস করার চেষ্টা করি, কলটি কাজ করে না এবং একটি ত্রুটির মাধ্যমে।
উদাহরণ 1
#function which takes three argument def func(a,b,c): print("{} {} {}".format(a, b, c)) #list of arguments lst = ['python', 'java', 'csharp'] #passing the list func(lst)পাস করা
ফলাফল
TypeError: func() missing 2 required positional arguments: 'b' and 'c'
একবার আমরা 'বাছাই' ভেরিয়েবল হয়ে গেলে, আপনি এমন কিছু করবেন যা একটি সাধারণ টিপল দিয়ে সম্ভব নয়। Args[0], args[1] এবং args[2] আমাদের যথাক্রমে প্রথম, দ্বিতীয় এবং তৃতীয় আর্গুমেন্ট দেবে। আপনি যদি আর্গস টিপলকে একটি তালিকায় রূপান্তর করেন তবে আমরা এটিতে আইটেমগুলিকে সংশোধন, মুছে ফেলা এবং পরিবর্তন করার কাজ করতে পারি৷
এই প্যাকড আর্গুমেন্টগুলিকে অন্য পদ্ধতিতে পাস করতে, আমাদের আনপ্যাকিং করতে হবে -
def __init__(self, *args, **kwargs): #some code here car(VehicleClass, self).__init__(self, *args, **kwargs) #some code below
আবার আমাদের আছে * অপারেটর, কিন্তু এবার এটি একটি মেথড কলের প্রসঙ্গে। এখন যা করে তা হল args অ্যারেকে বিস্ফোরিত করা এবং পদ্ধতিটিকে কল করা যেন প্রতিটি ভেরিয়েবল স্বাধীন। স্পষ্ট বোঝার জন্য নীচে আরেকটি উদাহরণ দেওয়া হল -
উদাহরণ 2
def func1(x, y, z): print(x) print(y) print(z) def func2(*args): #Convert args tuple to a list so we can do modification. args = list(args) args[0] = 'HTML' args[1] = 'CSS' args[2] = 'JavaScript' func1(*args) func2('Python', 'Java', 'CSharp')
ফলাফল
HTML CSS JavaScript
উপরের আউটপুট থেকে, আমরা তিনটি আর্গুমেন্টকে func1 এ পাঠানোর আগে পরিবর্তন করতে পারি।
একইভাবে আমরা উদাহরণ 1 এ পাওয়া TypeError বার্তাটি সমাধান করতে পারি।
উদাহরণ:1_1
#function which takes three argument def func(a,b,c): print("{} {} {}".format(a, b, c)) #list of arguments lst = ['python', 'java', 'csharp'] #passing the list func(*lst)পাস করা
ফলাফল
python java csharp
তাই যদি আমরা জানি না যে একটি পাইথন ফাংশনে কতগুলি আর্গুমেন্ট পাস করতে হবে, আমরা একটি টিপলে সমস্ত আর্গুমেন্ট প্যাক করতে প্যাকিং ব্যবহার করতে পারি৷
#Below function uses packing to sum unknown number of arguments def Sum(*args): sum = 0 for i in range(0, len(args)): sum = sum + args[i] return sum #Driver code print("Function with 2 arguments & Sum is: \n",Sum(9, 12)) print("Function with 5 arguments & Sum is: \n",Sum(2, 3, 4, 5, 6)) print("Function with 6 arguments & Sum is: \n",Sum(20, 30, 40, 12, 40, 54))
ফলাফল
Function with 2 arguments & Sum is: 21 Function with 5 arguments & Sum is: 20 Function with 6 arguments & Sum is: 196
প্যাকিং এবং আনপ্যাক উভয়ের ব্যবহার প্রদর্শনের জন্য নীচে আরেকটি প্রোগ্রাম রয়েছে:
#function with three arguments def func1(x,y,z): print("Argument One: ",x) print("\nArgument Two: ",y) print("\nArgument Three: ",z) #Packing- All arguments passed to func2 are packed into tuple *args def func2(*args): #To do some modification, we need to convert args tuple to list args = list(args) #Modifying args[0] & args[1] args[0] = 'Hello' args[1] = 'TutorialsPoint' #Unpacking args and calling func1() func1(*args) #Driver code func2("I", "Love", "Coding")
ফলাফল
Argument One: Hello Argument Two: TutorialsPoint Argument Three: Coding
অভিধানের জন্য ** ব্যবহার করুন
# Program to demonstrate unpacking of dictionary items using ** def func(x,y,z): print("Dicionary first item: ",x) print("\nDictionary second item: ",y) print("\nDictionary third item: ",z) d = {'x': 27, 'y': 54, 'z': 81} func(**d)
ফলাফল
Dicionary first item: 27 Dictionary second item: 54 Dictionary third item: 81
অ্যাপ্লিকেশানগুলি
-
সকেট প্রোগ্রামিংয়ে ব্যবহৃত হয় যেখানে আমাদের সার্ভারে অজানা (অসীম) সংখ্যক অনুরোধ পাঠাতে হয়।
-
ফাংশন দেখতে ভেরিয়েবল আর্গুমেন্ট পাঠাতে জ্যাঙ্গোর মতো ওয়েব ফ্রেমওয়ার্কে ব্যবহার করা হয়।
-
র্যাপার ফাংশনে ব্যবহৃত হয় যার জন্য আমাদের পরিবর্তনশীল আর্গুমেন্টে পাস করতে হয়।