python - Cython:可以在函数签名中声明列表项类型吗?
问题描述
我正在使用 Cython,我想声明一个函数,其参数是一个包含 cdef 类实例的列表。我遵循了文档,并且还找到了一种基于使用局部变量使其工作的解决方法。但是,我想直接在函数签名中声明列表中项目的类型。这有可能吗?
作为一个简单的示例,请考虑以下扩展类型。
cdef class Shrubbery:
cdef int width, height
cdef float depth
现在假设,我想定义一个使用该 cdef 类的实例作为输入的函数。我可以这样做:
cdef widen_shrubbery(Shrubbery sh, extra_width):
sh.width = sh.width + extra_width
函数签名中的类型声明Shrubbery
是访问 cdef 类的属性所必需的,因为 Cython 编译器必须知道它是该类型的实例而不是通用 Python 对象。
现在假设,我想定义一个函数,该函数使用该 cdef 类的实例列表作为输入。我的解决方法是在函数内部定义一个局部变量的解决方案,如下所示:
cdef widen_shrubberies(list_of_sh, extra_width):
cdef Shrubbery sh
for i in len(list_of_sh):
sh = list_of_sh[i]
sh.width = sh.width + extra_width
但我想知道是否可以避免使用局部变量,而是Shrubbery
直接在函数的签名中声明包含实例的列表。可能吗?我该怎么做呢?
下面的代码并没有削减它:
cdef widen_shrubberies(list Shrubbery list_of_sh, extra_width):
for sh in list_of_sh:
sh.width = sh.width + extra_width
解决方案
推荐阅读
- javascript - 如何从谷歌电子表格中获取谷歌文档中的段落并创建文档链接?
- c# - 即使安装了 Unity UI,UnityEngine.UI 也不属于我的项目。我还能如何在运行时更改文本?
- mocking - 如何在 pytest-mock 中模拟链式调用
- python - TypeError: readData() 接受 1 个位置参数,但给出了 2 个
- python - 无法在 Python 3.10 上安装 Matplotlib
- html - 如何适应块内2个不同线条元素的宽度以适应CSS中块的宽度?
- asp.net - 具有相同 UserIdentity 类型的多个 UserManager
- r - 在 R 中格式化日期
- azure - 是否可以在不停机的情况下在两个 Azure Front Door 资源之间移动主机名?
- python - 如何从一个单元格中获取一个或多个值并使用 pandas 转储单元格的其余部分