2016-04-14 23 views
8

人們在回答a1提到,a2是否有不能用關鍵字參數調用的內置函數的完整列表?

由於Python的C級API的開發方式,很多關於他們的論點內置 函數和方法實際上並沒有名字。

我發現它真的很煩人,因爲我無法通過查看文檔來了解它。例如,

的eval(表達,全局=無,當地人=無)

然後寫這行代碼

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

並得到TypeError: eval() takes no keyword arguments。那麼是否有這種功能的完整列表?我怎麼知道一個函數是否允許有關鍵字參數?

+0

不僅如此,但有這個錯誤,嘗試'排序(迭代= [])'與'排序(迭代=無)'。 –

+1

我想所有這些「陷阱」實際上都是bug,應該被報告:「sorted()」和關鍵字參數都被記錄但不被接受。 (Fwiw PyPy通常接受關鍵字參數。) –

+0

據報道IIRC。 (我想我從錯誤跟蹤器中讀取它) –

回答

4

在Python 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不能被用作關鍵字參數)

/意味着接下來的參數可以用作關鍵字參數。 C.F.

>>> 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,就必須有/iterable作爲iterable不能被用作關鍵字參數。


不幸的是,這些信息在Python文檔本身中尚不可用。

相關問題