मैं एक और उत्तर जोड़ना चाहता हूं:
यह तब होता है जब आप कॉलिंग फ़ंक्शन में कीवर्ड तर्क के साथ गलत स्थिति आदेश के साथ स्थितीय पैरामीटर पास करने का प्रयास करते हैं।
there is difference between parameter and argument
आप अजगर में यहां तर्क और पैरामीटर के बारे में विस्तार से पढ़ सकते हैं
def hello(a,b=1, *args):
print(a, b, *args)
hello(1, 2, 3, 4,a=12)
चूंकि हमारे पास तीन पैरामीटर हैं:
एक स्थितीय पैरामीटर है
b = 1 कीवर्ड और डिफ़ॉल्ट पैरामीटर है
* आर्गेज चर लंबाई पैरामीटर है
इसलिए हम पहली बार स्थितीय पैरामीटर के रूप में असाइन करते हैं, इसका मतलब है कि हमें इसकी स्थिति के क्रम में स्थितीय तर्क के लिए मूल्य प्रदान करना है, यहां ऑर्डर की बात है। लेकिन हम कॉलिंग फ़ंक्शन के स्थान पर तर्क 1 पास कर रहे हैं और फिर हम कीवर्ड तर्क के रूप में मानकर, मूल्य प्रदान कर रहे हैं। अब दो मान हैं:
एक स्थितीय मूल्य है: a = 1
दूसरा कीवर्डेड मान है जो एक = 12 है
उपाय
हम परिवर्तन के लिए है hello(1, 2, 3, 4,a=12)
करने के लिए hello(1, 2, 3, 4,12)
तो अब एक केवल एक स्थितीय मूल्य जो 1 और बी 2 मूल्य मिलता है और शेष मान * args (चर लंबाई पैरामीटर) मिल जाएगा होगा मिल जाएगा
अतिरिक्त जानकारी
अगर हम चाहते हैं कि * args को 2,3,4 और एक को 1 और b को 12 मिलना चाहिए
तो हम इस तरह कर सकते हैं
def hello(a,*args,b=1):
pass
hello(1, 2, 3, 4,b=12)
कुछ और :
def hello(a,*c,b=1,**kwargs):
print(b)
print(c)
print(a)
print(kwargs)
hello(1,2,1,2,8,9,c=12)
आउटपुट:
1
(2, 1, 2, 8, 9)
1
{'c': 12}
self
निहितार्थ से बेहतर हैthis
।