पायथन में फ़ंक्शन तर्क के रूप में सूचियों, टुपल्स और शब्दकोशों का विस्तार और पास करना

व्यापार

पायथन में, सूचियों (सरणी), टुपल्स और शब्दकोशों का विस्तार (अनपैक) किया जा सकता है और उनके संबंधित तत्वों को फ़ंक्शन तर्कों के रूप में एक साथ पारित किया जा सकता है।

फ़ंक्शन को कॉल करते समय, सूचियों और टुपल्स के लिए * और शब्दकोशों के लिए ** के साथ तर्क निर्दिष्ट करें। तारांकन की संख्या पर ध्यान दें *।

निम्नलिखित विवरण यहाँ वर्णित हैं।

  • * (एक तारांकन) के साथ एक सूची या टपल का विस्तार (अनपैक) करें
    • डिफ़ॉल्ट तर्कों वाले कार्यों के लिए
    • चर-लंबाई तर्क वाले कार्यों के लिए
  • ** (दो तारांकन) के साथ शब्दकोश का विस्तार करें (अनपैक करें)
    • डिफ़ॉल्ट तर्कों वाले कार्यों के लिए
    • चर-लंबाई तर्क वाले कार्यों के लिए

फ़ंक्शन को परिभाषित करते समय *,** के साथ पायथन फ़ंक्शंस, डिफ़ॉल्ट तर्कों और चर लंबाई तर्कों के मूल उपयोग के लिए निम्न आलेख देखें।

* (एक तारांकन) के साथ एक सूची या टपल का विस्तार (अनपैक) करें

जब एक सूची या टपल को * के साथ एक तर्क के रूप में निर्दिष्ट किया जाता है, तो इसे विस्तारित किया जाता है और प्रत्येक तत्व को एक अलग तर्क के रूप में पारित किया जाता है।

def func(arg1, arg2, arg3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

l = ['one', 'two', 'three']

func(*l)
# arg1 = one
# arg2 = two
# arg3 = three

func(*['one', 'two', 'three'])
# arg1 = one
# arg2 = two
# arg3 = three

t = ('one', 'two', 'three')

func(*t)
# arg1 = one
# arg2 = two
# arg3 = three

func(*('one', 'two', 'three'))
# arg1 = one
# arg2 = two
# arg3 = three

निम्नलिखित स्पष्टीकरण एक सूची के लिए है, लेकिन वही टपल पर लागू होता है।

यदि तत्वों की संख्या तर्कों की संख्या से मेल नहीं खाती है, तो एक TypeError त्रुटि उत्पन्न होती है।

# func(*['one', 'two'])
# TypeError: func() missing 1 required positional argument: 'arg3'

# func(*['one', 'two', 'three', 'four'])
# TypeError: func() takes 3 positional arguments but 4 were given

डिफ़ॉल्ट तर्कों वाले कार्यों के लिए

यदि कोई डिफ़ॉल्ट तर्क सेट किया गया है, तो तत्वों की संख्या अपर्याप्त होने पर डिफ़ॉल्ट तर्क का उपयोग किया जाता है। यदि तत्वों की संख्या बहुत बड़ी है, तो एक TypeError त्रुटि उत्पन्न होती है।

def func_default(arg1=1, arg2=2, arg3=3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

func_default(*['one', 'two'])
# arg1 = one
# arg2 = two
# arg3 = 3

func_default(*['one'])
# arg1 = one
# arg2 = 2
# arg3 = 3

# func_default(*['one', 'two', 'three', 'four'])
# TypeError: func_default() takes from 0 to 3 positional arguments but 4 were given

चर-लंबाई तर्क वाले कार्यों के लिए

यदि एक चर-लंबाई तर्क सेट किया गया है, तो स्थितीय तर्क के लिए तत्व के बाद के सभी तत्व चर-लंबाई तर्क को पास कर दिए जाते हैं।

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

func_args(*['one', 'two'])
# arg1 = one
# args = ('two',)

func_args(*['one', 'two', 'three'])
# arg1 = one
# args = ('two', 'three')

func_args(*['one', 'two', 'three', 'four'])
# arg1 = one
# args = ('two', 'three', 'four')

** (दो तारांकन) के साथ शब्दकोश का विस्तार करें (अनपैक करें)

जब एक डिक्शनरी डिक्ट को ** के साथ एक तर्क के रूप में निर्दिष्ट किया जाता है, तो तत्व कुंजियों को तर्क नामों के रूप में और मानों को तर्क मानों के रूप में विस्तारित किया जाता है, और प्रत्येक को एक अलग तर्क के रूप में पारित किया जाता है।

def func(arg1, arg2, arg3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

d = {'arg1': 'one', 'arg2': 'two', 'arg3': 'three'}

func(**d)
# arg1 = one
# arg2 = two
# arg3 = three

func(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three'})
# arg1 = one
# arg2 = two
# arg3 = three

यदि कोई कुंजी नहीं है जो तर्क नाम से मेल खाती है या कोई कुंजी है जो मेल नहीं खाती है, तो एक TypeError त्रुटि होगी।

# func(**{'arg1': 'one', 'arg2': 'two'})
# TypeError: func() missing 1 required positional argument: 'arg3'

# func(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three', 'arg4': 'four'})
# TypeError: func() got an unexpected keyword argument 'arg4'

डिफ़ॉल्ट तर्कों वाले कार्यों के लिए

वह छवि जिसमें केवल डिक्शनरी में कुंजियों से मेल खाने वाले तर्क नामों के मान अपडेट किए जाते हैं।

एक कुंजी जो तर्क नाम से मेल नहीं खाती है, उसके परिणामस्वरूप TypeError त्रुटि होगी।

def func_default(arg1=1, arg2=2, arg3=3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

func_default(**{'arg1': 'one'})
# arg1 = one
# arg2 = 2
# arg3 = 3

func_default(**{'arg2': 'two', 'arg3': 'three'})
# arg1 = 1
# arg2 = two
# arg3 = three

# func_default(**{'arg1': 'one', 'arg4': 'four'})
# TypeError: func_default() got an unexpected keyword argument 'arg4'

चर-लंबाई तर्क वाले कार्यों के लिए

यदि चर-लंबाई तर्क सेट किए गए हैं, तो तर्क के रूप में निर्दिष्ट तर्क नाम के अलावा किसी अन्य कुंजी के साथ कोई भी तत्व चर-लंबाई तर्क को पारित किया जाता है।

def func_kwargs(arg1, **kwargs):
    print('arg1 =', arg1)
    print('kwargs =', kwargs)

func_kwargs(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three'})
# arg1 = one
# kwargs = {'arg2': 'two', 'arg3': 'three'}

func_kwargs(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three', 'arg4': 'four'})
# arg1 = one
# kwargs = {'arg2': 'two', 'arg3': 'three', 'arg4': 'four'}

func_kwargs(**{'arg1': 'one', 'arg3': 'three'})
# arg1 = one
# kwargs = {'arg3': 'three'}
Copied title and URL