识别方法是用Python还是用Cython编写的

时间:2013-06-24 08:33:34

标签: python cython

我有一个接收方法的函数。我想知道这个方法是用Python还是用Cython编写的。有没有可靠的方法来做到这一点?

1 个答案:

答案 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'


希望这会有所帮助......你告诉我。