यह एक ऑपरेटर के रूप में ऐसा नहीं है, इसलिए इसका वास्तव में नाम नहीं है, लेकिन इसे "सिंटेक्टिक नियम" के रूप में परिभाषित किया गया है । तो इसे बुलाया जाना चाहिए:
- "कीवर्ड तर्क सिंटैक्स को अनपैक कर रहा है"
यदि आपके पास तर्कों की एक सूची है, *args
तो इसे "तर्क अनपैकिंग"**kwargs
कहा जाता है , उसी तरह "कीवर्ड तर्क अनपैकिंग" कहा जाता है ।
यदि आप इसे बाएं हाथ की तरफ से उपयोग करते हैं =
, तो जैसा a, *middle, end = my_tuple
कि आप कहेंगे, "टपल अनपैकिंग" ।
कुल मिलाकर, तीन प्रकार के (एकल पैरामीटर) तर्क हैं:
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 में पाया जा सकता है , साथ ही डॉक्स के नियंत्रण प्रवाह अनुभाग में भी। हालांकि यह ध्यान दिया जाना चाहिए कि फ़ंक्शन हस्ताक्षर ऑब्जेक्ट PEP केवल एक मसौदा है, और शब्दावली केवल एक व्यक्ति का विचार हो सकता है। लेकिन वे वैसे भी अच्छे पद हैं। :)
तो तर्क *
और **
तर्क सिर्फ अपने संबंधित डेटा संरचनाओं को अनपैक करते हैं:
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)
[१]: Iterables ऑब्जेक्ट हैं जो __iter__()
विधि को लागू करते हैं और मैपिंग ऑब्जेक्ट हैं जो कार्यान्वित करते हैं keys()
और __getitem__()
। कोई भी वस्तु जो इस प्रोटोकॉल का समर्थन करती है, उसे निर्माणकर्ताओं द्वारा समझा जाएगा tuple()
और dict()
, इसलिए उनका उपयोग तर्क-वितर्क के लिए किया जा सकता है।