2016-04-14 2 views
8

लोग तरीके के कारण अजगर सी स्तर एपीआई विकसित की है, उनके तर्कों के लिए निर्मित कार्य करता है और तरीकों वास्तव में नहीं है नाम का एक बहुत के लिए जवाब a1 में उल्लेख किया है, a2 किक्या अंतर्निहित कार्यों की एक पूरी सूची है जिसे कीवर्ड तर्क के साथ नहीं कहा जा सकता है?

मुझे यह वास्तव में कष्टप्रद कारण मिला क्योंकि मैं डॉक्टर को देखकर इसे जानने में सक्षम नहीं हूं। उदाहरण के लिए,

eval (अभिव्यक्ति, वैश्विक = कोई नहीं, स्थानीय लोगों = कोई नहीं) के लिए

तब मैं कोड

print(eval('a+b', globals={'a':1, 'b':2})) 

की इस पंक्ति में लिखा था और TypeError: eval() takes no keyword arguments मिला है। तो क्या इस तरह के कार्यों की पूरी सूची है? मुझे कैसे पता चलेगा कि किसी फ़ंक्शन को कीवर्ड तर्क रखने की अनुमति है या नहीं?

+0

केवल इतना ही नहीं, लेकिन इसके साथ बग हैं, 'क्रमबद्ध करें (iterable = [])' बनाम 'क्रमबद्ध (iterable = none)'। –

+1

मुझे लगता है कि इस तरह के सभी "जाल" वास्तव में बग हैं, और रिपोर्ट की जानी चाहिए: दोनों 'क्रमबद्ध() '' और कीवर्ड तर्क दस्तावेज लेकिन स्वीकार नहीं किए गए हैं। (Fwiw PyPy आमतौर पर कीवर्ड तर्क स्वीकार करता है।) –

+0

आईआईआरसी की सूचना मिली है। (मुझे लगता है कि मैंने इसे बग ट्रैकर से पढ़ा है) –

उत्तर

4

अजगर 3.5 में आप में निर्मित समारोह के __text_signature__ का निरीक्षण कर सकते हैं:

>>> eval.__text_signature__ 
'($module, source, globals=None, locals=None, /)' 

या

>>> abs.__text_signature__ 
'($module, x, /)' 
>>> abs(x=5) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: abs() takes no keyword arguments 

(x एक कीवर्ड तर्क के रूप में इस्तेमाल नहीं किया जा सकता है)

/ इसका मतलब है कि उसके बाद वाले तर्क कीवर्ड तर्क के रूप में उपयोग किए जा सकते हैं। सी.एफ़

>>> compile.__text_signature__ 
'($module, /, source, filename, mode, flags=0,\n  dont_inherit=False, optimize=-1)' 
>>> compile(source='foo', filename='bar', mode='exec') 
<code object <module> at 0x7f41c58f0030, file "bar", line 1> 

बेशक वहाँ 3.5 में भी कीड़े हैं:

>>> sorted.__text_signature__ 
'($module, iterable, key=None, reverse=False)' 

हालांकि issue 26729 in the Python bug tracker लिए, वहाँ चाहिए अनुसार / होने के लिए के बाद iterableiterable के रूप में एक कीवर्ड तर्क के रूप में इस्तेमाल नहीं किया जा सकता है।


दुर्भाग्यवश यह जानकारी अभी तक पायथन दस्तावेज़ में उपलब्ध नहीं है।

संबंधित मुद्दे

 संबंधित मुद्दे