当前位置: 首页 > 面试题库 >

cython中def,cdef和cpdef的定义

谢鸿飞
2023-03-14
问题内容

我想知道的区别defcdefcpdef当我宣布一个功能。def和其他之间的区别或多或少很明显。而且我还看到,有时在声明(cdef void/double/int... name)中添加了返回类型,有时则没有。

我还想知道如何在cython中声明一个字符串变量,因为我不知道,我将其声明为对象。


问题答案:

def在Python中声明一个函数。由于Cython基于C运行时,因此您可以使用cdefcpdef

cdef在C语言层中声明函数。如您所知(或不?),您必须使用C语言定义每个函数的返回值类型。有时,函数会以形式返回void,这return在Python中是等同的。

Python是一种面向对象的语言。因此,您还可以在C ++语言层中定义类方法,并在子类中覆盖此方法:

cdef class A:
    cdef foo(self):
        print "A"

cdef class B(A)
    cdef foo(self, x=None)
        print "B", x

cdef class C(B):
    cpdef foo(self, x=True, int k=3)
        print "C", x, k

总结,为什么我们需要使用defcdefcpdef?因为如果您使用Cython,则在编译之前,您的Python代码将被转换为C代码。这样,您就可以控制生成的C代码列表。

有关更多信息,建议您阅读官方文档:http
:
//docs.cython.org/src/reference/language_basics.html



 类似资料:
  • 我正在寻找合并一些cython来加速我的代码。我在Jupyter中运行cython代码时遇到问题。 牢房1: 单元格2: 错误: 但如果我这样做,效果很好。 看起来cdef在Jupyter中的使用方式不同,我如何在Jupyter笔记本中使用cdef?

  • 我引用马丁·奥德斯基的话: def表单是“按名称”的,每次使用时都会对其右手边进行评估。 val定义的右侧是在定义本身处计算的。 null null 我有点困惑为什么:

  • 问题内容: 我在我的python程序中使用cython进行相关计算。我有两个音频数据集,我需要知道它们之间的时差。根据开始时间切割第二组,然后在第一组上滑动。有两个for循环:一个滑动集合,而内部循环则计算该点的相关性。此方法效果很好,并且足够准确。 问题在于,使用纯python会花费超过一分钟的时间。使用我的cython代码,大约需要17秒。这仍然太多了。您是否有任何提示可以加快此代码的速度:

  • 可扩展编程语言 Def 的目标是将 C++ 的高效抽象和 Lisp 的强大表现力融为一体。 你可以通过阅读 入门教程 、源码 或 测试用例 来简要或详细的了解Def到底是怎样的一门编程语言。 Def 有着雄心勃勃的计划:在不损失效率的情况下达到现代脚本语言的高度抽象,并尽可能的减少程序员的负担。目前已经实现的部分为:类、泛型、函数重载、函数嵌套、函数模板、操作符绑定、完全类型推导、基于宏的元编程等

  • 不重复: 此问题不是链接问题的重复。尽管它询问了使用def和val定义函数之间的区别,但代码示例清楚地表明asker对Scala中方法和函数之间的区别感到困惑。该示例根本没有使用def来定义函数。-7小时前的Aaron Novstrup

  • 准确说Cython是单独的一门语言,专门用来写在Python里面import用的扩展库。实际上Cython的语法基本上跟Python一致,而Cython有专门的“编译器”先将 Cython代码转变成C(自动加入了一大堆的C-Python API),然后使用C编译器编译出最终的Python可调用的模块。