我cdef在Cython中有一堆函数,由文件中的def函数调用pyx,例如:
cdef inline void myfunc_c(...):
    (...)
    return
def wrapper(...):
    myfunc_c(...)
    return
这很好用.但为了简化不必为每个cdef函数都有一个python包装器,我试图cdef通过名称索引函数,或者通过将它们分配给字典或类似的东西:
def wrapper(operation):
    if operation == 'my_func':
        func = myfunc_c
    func(...)
    return
但这不起作用.Cython抱怨说它不知道它的类型myfunc_c.
有没有办法cpdef按名称索引或调用函数(例如使用字符串)?我也尝试了类似的东西locals()['myfunc_c'],但这也不起作用.
对于cdef函数来说,这绝对是不可能的 - 它们只定义了C接口而不是Python接口,所以没有内省可用.
cpdef函数定义了Python和C接口.在一个函数中,它们将是可用的globals()而不是locals()(因为locals()它只提供在该函数中定义的变量.)
我实际上并不认为你想这样做.我想你只想使用cpdef而不是cdef因为这会自动为函数生成一个Python包装器.
| 归档时间: | 
 | 
| 查看次数: | 736 次 | 
| 最近记录: |