是否有完整的内置函数列表,无法使用关键字参数调用?

lai*_*e9m 8 python arguments python-c-api

人们在答案a1,a2中提到了这一点

由于Python C级API的开发方式,许多内置函数和方法实际上没有参数的名称.

我发现它真的很烦人因为我无法通过查看文档来了解它.例如,eval

eval(表达式,globals = None,locals = None)

然后我写了这行代码

print(eval('a+b', globals={'a':1, 'b':2}))
Run Code Online (Sandbox Code Playgroud)

并得到了TypeError: eval() takes no keyword arguments.那么有这种功能的完整列表吗?如何知道函数是否允许包含关键字参数?

Ant*_*ala 4

在 Python 3.5 中,您可以检查__text_signature__内置函数的:

>>> eval.__text_signature__
'($module, source, globals=None, locals=None, /)'
Run Code Online (Sandbox Code Playgroud)

或者

>>> 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
Run Code Online (Sandbox Code Playgroud)

x不能用作关键字参数)

/意味着后面的参数可以用作关键字参数。CF

>>> 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>
Run Code Online (Sandbox Code Playgroud)

当然,即使在 3.5 中也存在错误:

>>> sorted.__text_signature__
'($module, iterable, key=None, reverse=False)'
Run Code Online (Sandbox Code Playgroud)

尽管根据Python bug tracker 中的问题 26729,应该在/the 之后iterable,因为 theiterable不能用作关键字参数。


不幸的是,Python 文档本身尚未提供此信息。