Cython C类型定义

时间:2018-07-30 11:22:19

标签: types cython

为了使我的Cython代码更快,我想尽可能地声明变量类型。

cpdef void __init__(self, config, protocol=None, int slave_number, int fifo_length=170, float speed_factor=1.0) except *:
        assert 0 < config.watermark_height <= fifo_length
        assert protocol is None
        assert slave_number is int
        self.config = config
        self.protocol = protocol
        self.slave_number = slave_number
        self.speed_factor = speed_factor

2个问题:

  1. 如何将self.slave_number变量声明为int?#

  2. 如果我的cp-function参数已经将其声明为int了,那么断言(例如slave_numbers是int)是不必要的吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

  1. Extension type中的变量在类声明中定义。根据您的情况:

    cdef class SpeedClass:
        cdef int slave_number
        cdef ...
    
  2. __init__的调用会将参数转换为整数,并且在无法执行操作时出错。因此,您可以将浮点值传递给函数。在函数内部,slave_numbers始终是整数,因为无论如何它将在调用时强制转换,并且检查是无用的。我无法在文档中明确找到此信息,因此我通过一个小示例对其进行了测试(请参见下文)。

    def f1(int i):
        print(type(i))
        return i*2
    

    您可以从命令行进行测试

    python3 -c 'import test_arguments; print(test_arguments.f1(1))'
    

    python3 -c 'import test_arguments; print(test_arguments.f1(1.23))'