এটি এর মতো কোনও অপারেটর নয়, সুতরাং এর আসলে কোনও নাম নেই, তবে এটি একটি "সিনট্যাকটিক নিয়ম" হিসাবে সংজ্ঞায়িত হয়েছে । সুতরাং এটি বলা উচিত:
- "কীওয়ার্ড আর্গুমেন্ট সিনট্যাক্স আনপ্যাক করে"
আপনি আর্গুমেন্ট এর একটি তালিকায় থাকে, তাহলে *args
, এটা বলা হচ্ছে "যুক্তি আন-প্যাক" , একই পদ্ধতিতে **kwargs
বলা হয় "KEYWORD যুক্তি unpacking" ।
আপনি একটি বাম দিকে এটা ব্যবহার করেন তাহলে =
, হিসাবে a, *middle, end = my_tuple
, আপনি বলতে চাই "tuple unpacking" ।
মোট, তিন ধরণের (একক প্যারামিটার) যুক্তি রয়েছে:
def f(x) # x: positional argument
def f(x, y=0) # y: keyword argument
def f(x, *xs, y=0) # y: keyword-only argument
*args
যুক্তি "পরিবর্তনশীল অবস্থানগত পরামিতি" এবং বলা হয় **kwargs
"পরিবর্তনশীল শব্দ পরামিতি" হয়। কেবলমাত্র কীওয়ার্ড-যুক্তি যুক্তিগুলি অবস্থানগতভাবে দেওয়া যায় না, কারণ একটি ভেরিয়েবল পজিশনাল প্যারামিটার আপনার দ্বারা পাস করা সমস্ত আর্গুমেন্ট গ্রহণ করবে।
এর বেশিরভাগটি পিইপি 0362 এবং 3102 , পাশাপাশি ডক্সের নিয়ন্ত্রণ ফ্লো বিভাগে পাওয়া যাবে। এটি লক্ষ করা উচিত যে ফাংশন স্বাক্ষরকারী বস্তু পিইপি কেবল একটি খসড়া, এবং পরিভাষাটি কেবল একজন ব্যক্তির ধারণা হতে পারে। তবে সেগুলি যাইহোক ভাল পদ। :)
সুতরাং *
এবং **
যুক্তিগুলি কেবল তাদের সম্পর্কিত ডেটা কাঠামো আনপ্যাক করে:
args = (1, 2, 3) # usually a tuple, always an iterable[1]
f(*args) → f(1, 2, 3)
# and
kwargs = {"a": 1, "b": 2, "c": 3} # usually a dict, always a mapping*
f(**kwargs) -> f(a=1, b=2, c=3)
[1]: ইটেটারেবলগুলি হ'ল অবজেক্টগুলি যা __iter__()
পদ্ধতি প্রয়োগ করে এবং ম্যাপিংগুলি এমন বস্তু যা বাস্তবায়ন করে keys()
এবং __getitem__()
। এই প্রোটোকলকে সমর্থন করে এমন কোনও বস্তু নির্মাতারা বুঝতে পারবেন tuple()
এবং dict()
তাই সেগুলি প্যাকেজটি আনপ্যাক করার জন্য ব্যবহার করা যেতে পারে।