কিভাবে Python এ পরিবর্তনশীল দৈর্ঘ্যের আর্গুমেন্ট (*args, **kwargs) ব্যবহার করবেন

ব্যবসায়

নিম্নলিখিত ফাংশন আর্গুমেন্টগুলি সম্ভবত সবচেয়ে সাধারণ যা আপনাকে স্টাম্প করে যখন আপনি পাইথন কোডটি দেখেন এবং বলেন, “এটা কী?

  • *args
  • **kwargs

যেকোন সংখ্যক আর্গুমেন্ট (ভেরিয়েবল-লেন্থ আর্গুমেন্ট) নিম্নলিখিত ফাংশনের সংজ্ঞায় আর্গুমেন্টে একটি তারকাচিহ্ন যুক্ত করে নির্দিষ্ট করা যেতে পারে

  • *
  • **

*আর্গস,**কোয়ার্গস নামগুলি প্রায়ই একটি নিয়ম হিসাবে ব্যবহৃত হয়। যাইহোক, যতক্ষণ শুরুতে * এবং ** থাকে ততক্ষণ অন্যান্য নাম গ্রহণযোগ্য। নিম্নলিখিত নমুনা কোড *args,**kwargs নাম ব্যবহার করে।

নিম্নলিখিত বিবরণ নীচে বর্ণনা করা হয়.

  • *args:একটি টিপল হিসাবে একাধিক আর্গুমেন্ট গ্রহণ করে
  • **kwargs:একটি অভিধান হিসাবে একাধিক কীওয়ার্ড আর্গুমেন্ট গ্রহণ করে

*args:একটি টিপল হিসাবে একাধিক আর্গুমেন্ট গ্রহণ করে

আর্গুমেন্টের নির্বিচারে সংখ্যা নির্দিষ্ট করা যেতে পারে * এর সাথে আর্গুমেন্ট সংজ্ঞায়িত করে, যেমন *আর্গে।

def my_sum(*args):
    return sum(args)

print(my_sum(1, 2, 3, 4))
# 10

print(my_sum(1, 2, 3, 4, 5, 6, 7, 8))
# 36

ফাংশনে একটি টিপল হিসাবে একাধিক আর্গুমেন্ট পাওয়া যায়। উদাহরণে, যোগফল গণনা করতে sum() ফাংশনটি একটি টিপল পাস করা হয়।

def my_sum2(*args):
    print('args: ', args)
    print('type: ', type(args))
    print('sum : ', sum(args))

my_sum2(1, 2, 3, 4)
# args:  (1, 2, 3, 4)
# type:  <class 'tuple'>
# sum :  10

এটি একটি অবস্থানের যুক্তির সাথেও মিলিত হতে পারে।

অবস্থানগত আর্গুমেন্টের পরে (ডানদিকে) নির্দিষ্ট করা মানটি টিপল হিসাবে আর্গসে পাস করা হয়। যদি শুধুমাত্র একটি অবস্থানগত যুক্তি থাকে তবে এটি একটি খালি টিপল।

def func_args(arg1, arg2, *args):
    print('arg1: ', arg1)
    print('arg2: ', arg2)
    print('args: ', args)

func_args(0, 1, 2, 3, 4)
# arg1:  0
# arg2:  1
# args:  (2, 3, 4)

func_args(0, 1)
# arg1:  0
# arg2:  1
# args:  ()

* দ্বারা চিহ্নিত আর্গুমেন্টগুলি প্রথমে সংজ্ঞায়িত করা যেতে পারে। এই ক্ষেত্রে, তবে, *args-এর চেয়ে পরে সংজ্ঞায়িত আর্গুমেন্টগুলি অবশ্যই কীওয়ার্ড আকারে নির্দিষ্ট করতে হবে। ঘটনাক্রমে, কীওয়ার্ড ফরম্যাট হল “আর্গুমেন্টের নাম = মান” ফর্ম।

শেষ মানটি স্বয়ংক্রিয়ভাবে অবস্থানগত যুক্তিতে পাস হয় না। তাই, যদি এটি একটি কীওয়ার্ড আর্গুমেন্ট হিসাবে নির্দিষ্ট না করা হয়, তাহলে একটি TypeError ত্রুটি দেখা দেবে।

def func_args2(arg1, *args, arg2):
    print('arg1: ', arg1)
    print('arg2: ', arg2)
    print('args: ', args)

# func_args2(0, 1, 2, 3, 4)
# TypeError: func_args2() missing 1 required keyword-only argument: 'arg2'

func_args2(0, 1, 2, 3, arg2=4)
# arg1:  0
# arg2:  4
# args:  (1, 2, 3)

যদি শুধুমাত্র * আর্গুমেন্ট নির্দিষ্ট করা হয়, তাহলে পরবর্তী আর্গুমেন্টগুলিকে সবসময় কীওয়ার্ড আর্গুমেন্ট হিসাবে নির্দিষ্ট করতে হবে।(keyword-only argument)

def func_args_kw_only(arg1, *, arg2):
    print('arg1: ', arg1)
    print('arg2: ', arg2)

# func_args_kw_only(100, 200)
# TypeError: func_args_kw_only() takes 1 positional argument but 2 were given

func_args_kw_only(100, arg2=200)
# arg1:  100
# arg2:  200

**kwargs:একটি অভিধান হিসাবে একাধিক কীওয়ার্ড আর্গুমেন্ট গ্রহণ করে

কীওয়ার্ড আর্গুমেন্টের নির্বিচারে সংখ্যা নির্দিষ্ট করা যেতে পারে আর্গুমেন্টের সংজ্ঞা দিয়ে ,** যেমন **কোয়ার্গে।

ফাংশনে, আর্গুমেন্টের নাম ডিকশনারী হিসেবে প্রাপ্ত হয় যার কী কী এবং যার মান মান।

def func_kwargs(**kwargs):
    print('kwargs: ', kwargs)
    print('type: ', type(kwargs))

func_kwargs(key1=1, key2=2, key3=3)
# kwargs:  {'key1': 1, 'key2': 2, 'key3': 3}
# type:  <class 'dict'>

এটি একটি অবস্থান যুক্তির সাথে একত্রে ব্যবহার করা যেতে পারে।

def func_kwargs_positional(arg1, arg2, **kwargs):
    print('arg1: ', arg1)
    print('arg2: ', arg2)
    print('kwargs: ', kwargs)

func_kwargs_positional(0, 1, key1=1)
# arg1:  0
# arg2:  1
# kwargs:  {'key1': 1}

ফাংশন কল করার সময় একটি আর্গুমেন্ট হিসাবে ** এর সাথে ডিকশনারি অবজেক্ট নির্দিষ্ট করে, এটিকে প্রসারিত করা এবং সংশ্লিষ্ট আর্গুমেন্ট হিসাবে পাস করা সম্ভব।

d = {'key1': 1, 'key2': 2, 'arg1': 100, 'arg2': 200}

func_kwargs_positional(**d)
# arg1:  100
# arg2:  200
# kwargs:  {'key1': 1, 'key2': 2}

** দিয়ে চিহ্নিত আর্গুমেন্ট শুধুমাত্র আর্গুমেন্টের শেষে সংজ্ঞায়িত করা যেতে পারে। ** দিয়ে চিহ্নিত আর্গুমেন্টের পরে আরেকটি আর্গুমেন্ট সংজ্ঞায়িত করলে একটি সিনট্যাক্স এরর ত্রুটি দেখা দেবে।

# def func_kwargs_error(**kwargs, arg):
#     print(kwargs)

# SyntaxError: invalid syntax
Copied title and URL