lai*_*e9m 8 python arguments python-c-api
由于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.那么有这种功能的完整列表吗?如何知道函数是否允许包含关键字参数?
在 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 文档本身尚未提供此信息。
| 归档时间: |
|
| 查看次数: |
358 次 |
| 最近记录: |