处理 cython 中的默认参数

2023-12-28

我正在使用 cython 包装一些 C++ 代码,并且我不确定处理具有默认值的参数的最佳方法是什么。

在我的 C++ 代码中,我的函数的参数具有默认值。我想以这样的方式包装它们:如果未给出参数,则使用这些默认值。有没有办法做到这一点?

此时,我能看到提供选项参数的唯一方法是将它们定义为 python 代码的一部分(在def func中的声明pycode.pyx下面),但是我多次定义了我不想要的默认值。

cpp代码.h:

int init(const char *address=0, int port=0, int en_msg=false, int error=0);


pycode_c.pxd:

cdef extern from "cppcode.h":
int func(char *address, int port, int en_msg, int error)


pycode.pyx:

cimport pycode_c
def func(address, port, en_msg, error):
    return pycode_c.func(address, port, en_msg, error)

您可以使用不同的参数声明该函数("cppcode.pxd" https://gist.github.com/6a01dc02e35fb04cf97d#file_cppcode.pxd):

cdef extern from "cppcode.hpp":
     int init(char *address, int port, bint en_msg, int error)
     int init(char *address, int port, bint en_msg)
     int init(char *address, int port)
     int init(char *address)
     int init()

Where "cppcode.hpp" https://gist.github.com/6a01dc02e35fb04cf97d#file_cppcode.hpp:

int init(const char *address=0, int port=0, bool en_msg=false, int error=0);

它可以在 Cython 代码中使用("pycode.pyx" https://gist.github.com/6a01dc02e35fb04cf97d#file_pycode.pyx):

cimport cppcode

def init(address=None,port=None,en_msg=None,error=None):
    if error is not None:
        return cppcode.init(address, port, en_msg, error)
    elif en_msg is not None:
         return cppcode.init(address, port, en_msg)
    elif port is not None:
         return cppcode.init(address, port)
    elif address is not None:
         return cppcode.init(address)
    return cppcode.init()

并在 Python 中尝试("test_pycode.py" https://gist.github.com/6a01dc02e35fb04cf97d#file_test_pycode.py):

import pycode

pycode.init("address")

Output

address 0 false 0

赛通也有arg=* syntax http://docs.cython.org/src/userguide/pyrex_differences.html#optional-arguments-in-cdef-cpdef-functions (in *.pxd文件)用于可选参数:

cdef foo(x=*)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理 cython 中的默认参数 的相关文章

随机推荐

  • 如何使用 SwiftUI 在视图上检测向上、向下、向左和向右滑动

    我正在着手构建 Apple Watch 应用 我目前正在做的工作将要求我利用检测四个主要方向的滑动 UP DOWN LEFT and RIGHT 问题是我不知道如何检测到这一点 我环顾四周 发现自己走进了死胡同 我可以对下面的视图做什么才能
  • JQuery UI 翻转文本,就像gumroad.com [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我试图在我
  • 在 Chapel 文件中包含第二个源文件

    在 C 中 当我需要 actions cpp 中的类时classes cpp我包括标题 例如 include
  • 如何读取和遍历 inode

    我已经在 EXT2 文件系统中打开了超级块和组描述符 但我不知道如何读取根目录或其中的文件 这是我得到的一些内容 fd open dev sdb2 O RDONLY lseek fd SuperSize SEEK SET read fd s
  • 创建一个可以在 React 上拖放列和行的表格

    我想创建一个可以在 React 上拖放列和行的表格 我看过其他解决方案 例如反应美丽 dnd https github com atlassian react beautiful dnd 表格拖动器 https github com sin
  • 如何从非组件辅助函数访问 redux 的存储?

    我有一个辅助函数 当我想从 Redux 存储中删除某些内容时 我会调用它 但是 我需要能够访问函数内的当前存储 以确定下一步要做什么 这就是我想做的 export function deleteDocument id this props
  • 如何制作自己的 P2P 软件? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我怎样才能制作自己的napster 这些 p2p 程序使用哪个库 我不太熟悉套接字编程的概念 你能用Qt4制作p2p程序吗 从 Napst
  • Instagram 风格的多媒体列表视图

    我尝试过搜索但没有找到明确的答案 我想知道创建一个列表视图的最佳方法 该列表视图可以使用媒体控制器显示音频 视频视图项目 用户可以为每个项目播放 暂停等 我认为实现纹理视图将是前进的方向 我相信视频视图与滚动视图不能很好地配合 但我不确定从
  • 如何在 Json.NET 中使用 JsonSerializerSettings 在属性中指定时禁用 TypeNameHandling?

    有时我需要抑制输出 type 即使由 Json NET 指定属性JsonPropertyAttribute ItemTypeNameHandling https www newtonsoft com json help html P New
  • 检查字符串是否仅包含 utf8 字母

    我一直在寻找一种用 Javascript 处理这些东西的方法 PHP 有一个处理 unicode 字符的库 称为Unicode 字符属性 http php net manual en regexp reference unicode php
  • 恢复0的SKPhysicsBody仍然会反弹

    我正在尝试以恒定速度掉落 SKSpriteNode 并且不会弹跳 这是我正在使用的代码 SKSpriteNode floor SKSpriteNode spriteNodeWithColor UIColor clearColor size
  • slim php框架 图片上传放入数据库

    我是 slim php 框架的新手 我想上传图像并将文件名放入数据库中POST 有人可以给我一些示例代码吗 这是路由器 app gt post uploadFile 这将指向下面的函数 function uploadFile if isse
  • HttpListener 被调用两次

    我正在使用此代码来实现 Http Server public Server httpListener new HttpListener httpListener Prefixes Add Server UriAddress StartSer
  • ASP .Net:AspNetSqlMembershipProvider“唯一电子邮件”问题

    我在 ASP Net 4 Web 应用程序项目中使用 AspNetSqlMembershipProvider 我已在 web config 文件中将用户地址配置为唯一 requiresUniqueEmail true 如下所示
  • linux/list.h 中container_of 宏背后的基本原理

    在linux内核列表中的实现 include linux list h 第一行 粘贴在下面 背后的基本原理是什么container of macro const typeof type 0 gt member mptr ptr 在我的示例代
  • mysql交叉连接,但没有重复对?

    假设我的表中有以下行 表行 id 63 64 65 66 67 68 如果我运行以下查询 我会得到 30 行 SELECT r1 id r2 id FROM rows AS r1 CROSS JOIN rows AS r2 WHERE r1
  • 使用 iTextSharp 库提取 pdf 文件中包含的签名图像

    我有一个签名的 PDF 文件 通过这个使用 iTextSharp 库的函数 我找到了证书 p7m 签名 private void GetSignature string FileName AcroFields acroFields new
  • Form::file:验证错误和/或更新后如何使用 Input::old 重新填充?

    在我的 PhotosController 中 我尝试修改编辑操作 以便它显示 Form file 输入字段中的现有值 并且 如果验证失败 它会重新填充该字段 if validation gt passes saves the image o
  • Python Pandas 多列成对频率表

    初学者熊猫问题在这里 如何为所有列创建交叉频率计数表 我想使用输出来制作一个 Seaborn 热图 显示每对列之间的计数 我有一个数据框 使用 pyspark 从 hdfs 中提取 其中包含约 70 个独特的列和大约 600K 行 所需输出
  • 处理 cython 中的默认参数

    我正在使用 cython 包装一些 C 代码 并且我不确定处理具有默认值的参数的最佳方法是什么 在我的 C 代码中 我的函数的参数具有默认值 我想以这样的方式包装它们 如果未给出参数 则使用这些默认值 有没有办法做到这一点 此时 我能看到提