2016-04-14 79 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文档本身中尚不可用。

相关问题