CPython एक कॉल में 255 स्पष्ट रूप से पारित कर दिया तर्कों की एक सीमा होती है: क्योंकि अजगर 3.5, जब तक CALL_FUNCTION
opcode दोनों एन्कोड करने के लिए opcode तर्क अतिभारित
>>> def f(*args, **kwargs): pass
...
>>> exec("f({})".format(', '.join(map(str, range(256)))))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
SyntaxError: more than 255 arguments
यह सीमा जगह में है। स्टैक पर स्थितित्मक और कीवर्ड तर्कों की संख्या, दोनों एक बाइट में एन्कोडेड।
यह सीमा आगामी पायथन 3.7 रिलीज में हटा दी गई है, issue #27213 और issue #12844 देखें; # 27213 ने प्रदर्शन और सादगी (3.6 का हिस्सा) के लिए ऑपकोड के CALL_FUNCTION*
परिवार को फिर से काम किया, केवल एक ही तर्क गणना को एन्कोड करने के लिए ऑपोड तर्क को मुक्त किया, और # 12844 संकलन-समय जांच को हटा दिया जिसने अधिक तर्कों के साथ कोड को संकलित करने से रोक दिया। , को बचाने के लिए कितने ढेर (ताकि अपनी स्मृति से अब बाध्य) पर लगाया जा सकता है
3.7 में, EXTENDED_ARG()
opcode के साथ, वहाँ अब है कितने तर्क आप स्पष्ट तर्कों का उपयोग में पारित कर सकते हैं पर सभी पर कोई सीमा नहीं:
>>> import sys
>>> sys.version_info
sys.version_info(major=3, minor=7, micro=0, releaselevel='alpha', serial=2)
>>> def f(*args, **kwargs): pass
...
>>> exec("f({})".format(', '.join(map(str, range(256)))))
>>> exec("f({})".format(', '.join(map(str, range(2 ** 16)))))
ध्यान दें कि सूचीबद्ध करता है, tuples और शब्दकोशों sys.maxsize
तत्वों तक ही सीमित हैं, इसलिए यदि बुलाया समारोह *args
का उपयोग करता है और/या **kwargs
पकड़ने के सभी मापदंडों तो उन सीमित हैं मत करो।
*args
और **kwargs
कॉल सिंटैक्स (तर्कों का विस्तार) के लिए पाइथन मानक प्रकारों पर sys.maxint
आकार सीमा के अलावा कोई सीमा नहीं है।
ऐसा लगता है कि सीमा कॉलिंग पक्ष पर है। मैं कोशिश करता हूं कि 'f (' + ','। (I000) के लिए (str (i) में शामिल हों (+000)) + ')' – Brian
"डब्लूएफएम"? डब्ल्यूटीएफ? .... –
@ स्टेफन: * मेरे लिए काम करता है * –