python - Misleading(?) TypeError when passing keyword arguments to function defined with positional arguments -


cPython 2.4 में:

  def f (a, b, c, d): पास & gt; & gt; & gt; टाइप करें: एफ () बिल्कुल 4 गैर-कीवर्ड तर्क (0 दिए गए) लेता है  

लेकिन:

  & gt; & gt; & gt; टाइप करें: एफ () बिल्कुल 4 गैर-कीवर्ड तर्क (3 दिए गए) लेता है  

स्पष्ट रूप से, मैं वाकई वास्तव में पायथन के फ़ंक्शन-तर्क प्रसंस्करण तंत्र को समझें। किसी को इस पर कुछ प्रकाश साझा करने के लिए देखभाल? मैं देख रहा हूं कि क्या हो रहा है (तर्क स्लॉट्स को भरने, फिर दे रहे हैं), लेकिन मुझे लगता है कि यह एक नौसिखिया को बेईमानी देगा।

(यह भी, अगर लोगों को बेहतर प्रश्न कीवर्ड हैं - "हिम्मत" की तरह कुछ - - कृपया रिटाग करें)

जब आप कहते हैं

  def f (a , बी, सी, डी):  

आप अजगर कह रहे हैं कि f 4 स्थितिबद्ध तर्क लेता है हर बार जब आप f को कॉल करते हैं, तो उसे बिल्कुल 4 तर्क दिए जाने चाहिए, और पहला मान a को सौंपा जाएगा, दूसरा b , आदि

f (1,2,3,4) या

आपको f जैसे कुछ के साथ कॉल करने की अनुमति है < कोड> एफ (ए = 1, बी = 2, सी = 3, डी = 4) , या यहां तक ​​कि f (c = 3, b = 2, a = 1, d = 4)

लेकिन सभी मामलों में, बिल्कुल 4 तर्क वितरित किए जाने चाहिए।

f (b = 1, c = 1, d = 1) रिटर्न एक त्रुटि क्योंकि कोई भी मान a के लिए नहीं दिया गया है (0 दिया) f (a = 1, b = 1, c = 1) एक त्रुटि देता है क्योंकि d के लिए कोई मूल्य नहीं दिया गया है। (3 दिए गए)

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

वैसे, अगर आप कहते हैं

 < Code> def f (a = 1, b = 2, c = 3, d = 4):  

फिर आप अजगर कह रहे हैं कि f को 4 लगता है < Em> वैकल्पिक तर्क अगर कोई निश्चित आर्ग नहीं दिया जाता है, तो इसके डिफ़ॉल्ट मान को आपके लिए स्वचालित रूप से दिया जाता है फिर आप कॉल करने से दूर हो सकते हैं

f (a = 1, b = 1, c = 1) या f (b = 1, c = 1, d) = 1)


Comments

Popular posts from this blog

.net - C# List<T>.Find(x=>x.Rectangle.Contains(Point)) FAIL -

iphone - Smoothing a rounded stroke in Core Graphics -

c++ - QtQuick: QQmlApplicationEngine failed to load component qrc:/main.qml:23 Invalid attached object assignment -