我有一个接收方法的函数。我想知道这个方法是用Python还是用Cython编写的。有没有可靠的方法来做到这一点?
答案 0 :(得分:2)
只是一个想法,但是,假设“纯Python”意味着“不内置”the term “built-in” means “written in C”
(根据Python的文档):
然后我们可以通过这样做来区分这两种:
>>> import types
>>> types.BuiltinFunctionType
<type 'builtin_function_or_method'>
这不是C编译功能:
>>> def foo(x):
... pass
>>> isinstance(foo, types.BuiltinFunctionType)
False
这是C编译功能:
>>> from numpy import array
>>> isinstance(array, types.BuiltinFunctionType)
True
因此,任何具有C扩展名的第三方模块也会将其函数报告为类型builtin_function_or_method
。
相关链接:
编辑:
另一个想法(一个肮脏的想法,但是Sage不合作......):
>>> def foo(x):
... pass
>>> foo.some_attr = 0
接受,同时:
>>> array.some_attr = 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'builtin_function_or_method' object has no attribute 'some_attr'
希望这会有所帮助......你告诉我。