我想知道的区别def
,cdef
而cpdef
当我宣布一个功能。def和其他之间的区别或多或少很明显。而且我还看到,有时在声明(cdef void/double/int... name
)中添加了返回类型,有时则没有。
我还想知道如何在cython中声明一个字符串变量,因为我不知道,我将其声明为对象。
def
在Python中声明一个函数。由于Cython基于C运行时,因此您可以使用cdef
和cpdef
。
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
总结,为什么我们需要使用def
,cdef
并cpdef
?因为如果您使用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可调用的模块。