如何使用Cython从time.h调用时间?

时间:2014-08-27 17:18:27

标签: python time cython

我正在尝试使用Cython而不是Python import time直接加载time.h,但它不起作用。

我得到的只是一个错误

Call with wrong number of arguments (expected 1, got 0)

使用以下代码

cdef extern from "time.h" nogil:
    ctypedef int time_t
    time_t time(time_t*)

def test():
    cdef int ts
    ts = time()


    return ts

Cannot assign type 'long' to 'time_t *'

使用以下代码

cdef extern from "time.h" nogil:
    ctypedef int time_t
    time_t time(time_t*)

def test():
    cdef int ts
    ts = time(1)


    return ts

使用数学日志我可以简单地做

cdef extern from "math.h":
    double log10(double x)

时间怎么可能无法实现?

2 个答案:

答案 0 :(得分:4)

time的参数是要填充或NULL的time_t值的地址(即:"指针")

引用man 2 time

  

<强> time_t time(time_t *t);

     

[...]

     

如果t为非NULL,则返回值也存储在t。

指向的内存中

一些标准函数的奇怪之处在于返回一个值并且(可能)在提供的地址中存储相同的值。将0作为参数传递是绝对安全的,因为在大多数架构中 NULL 等同于((void*)0)。在这种情况下,time只会返回结果,并且不会尝试将其存储在提供的地址中。

答案 1 :(得分:1)

将NULL传递给时间。您也可以使用内置的libc.time:

from libc.time cimport time,time_t

cdef time_t t = time(NULL)
print t

给出了

1471622065