首先我们会使用PyMODINIT_FUNC 和PyMethodDef 进行创建c的扩展。
关于PyMethodDef可以的参数含义可以在官网查看

第一步

// 简单的say hello 函数
static PyObject* say_hello(PyObject* self, PyObject* args) {const char* name;if (!PyArg_ParseTuple(args, "s", &name))return NULL;printf("Hello %s!\n", name);Py_RETURN_NONE;
}// lambda 函数调用
void set_seed(int seed) {printf("seed %d!\n", seed);
}// PyMethodDef methods 函数
static void init_module(PyModuleDef* mdef, PyObject* m) {mdef->m_doc = "Inner c++ core of test";typedef PyObject* (*Myds)(PyObject*,PyObject**,int64_t,PyObject*);static PyMethodDef methods[] = {{"hello", (PyCFunction)say_hello, METH_VARARGS, NULL},// lambda 函数{ "lambda_hello",(PyCFunction)(Myds)[](PyObject* self, PyObject** args, int64_t n, PyObject* kw) -> PyObject* {try {uint64_t arg_filled=0;(void)arg_filled;if (n+(kw?Py_SIZE(kw):0)<=1 && n+(kw?Py_SIZE(kw):0)>=1 && PyLong_CheckExact(args[0])) {int arg0 = PyLong_AsLong(args[0]);//!PyErr_Occurred();if (kw) {auto kw_n = Py_SIZE(kw);for (int i=0; i<kw_n; i++) {auto ko = PyTuple_GET_ITEM(kw, i);auto vo = args[i+n];auto ks = PyUnicode_AsUTF8(ko);uint khash = leetcode::hash(ks);if (khash == 16948695u) {// hash match seedCHECK((PyLong_CheckExact(vo)));arg0 = PyLong_AsLong(vo);arg_filled |= 1ull << 0;continue;}LOGf << "Not a valid keyword:" << ks;}}return GET_PY_NONE((set_seed(arg0)));}} catch (const std::exception& e) {std::stringstream ss;ss  << "Wrong inputs arguments";PyErr_Format(PyExc_RuntimeError,"%s\n%s\nFailed reason:%s",ss.str().c_str(),R""(The function declarations are:void lambda_hello(int seed))"",e.what());}return nullptr;},METH_FASTCALL | METH_KEYWORDS,R""(Document:lambda_helloDeclaration:void lambda_hello(int seed))""},{NULL, NULL, 0, NULL}};PyModule_AddFunctions(m, methods);
}// 定义Extention的入口 PyMODINIT_FUNC
#define PYJF_MODULE_INIT(name) \
PyMODINIT_FUNC PyInit_##name() { \PyObject *m; \try { \PyModuleDef *def = new PyModuleDef(); \memset(def, 0, sizeof(PyModuleDef)); \def->m_name = #name; \def->m_doc = ""; \def->m_size = -1; \Py_INCREF(def); \m = PyModule_Create(def); \init_module(def, m); \} catch(const std::exception& e) { \PyErr_SetString(PyExc_RuntimeError, e.what()); \return nullptr; \} \return m; \
}// 声明
PYJF_MODULE_INIT(example_name)

详细的项目代码见github

python 扩展c extention相关推荐

  1. python文件编译_将c程序编译为python扩展,生成.whl文件

    借鉴的文章会在文章末尾会逐一给出 1. 对c文件进行编译 先确保要实现的代码运行成功,然后将main()函数删除,例如test.c文件 void test_func(char *str){ FILE ...

  2. Python 扩展 Op

    Python 扩展 Op 注意 :本文涉及的 Python Kernel 仅在 gcc 4.8.5 编译环境下充分测试,进一步的完善计划见 Issue 3951. 背景介绍 OneFlow 将各种对于 ...

  3. TensorFlow常用Python扩展包

    TensorFlow常用Python扩展包 TensorFlow 能够实现大部分神经网络的功能.但是,这还是不够的.对于预处理任务.序列化甚至绘图任务,还需要更多的 Python 包. 下面列出了一些 ...

  4. python基础:python扩展包的安装方式

    python扩展包有三种安装方式: 1. pip安装方式.python3默认自带pip,无需另外安装:在python2.7版本上默认为easy_install安装工作进行安装,如果需要使用pip安装, ...

  5. 无法激活“Pylance“扩展, 因为它依赖于未加载的 Python 扩展。解决办法

    "无法激活 "Pylance" 扩展, 因为它依赖于未加载的 "Python" 扩展.解决办法 卸载Python扩展(如果你有pylance先卸载它) ...

  6. zlib 离线安装_黑板派Python扩展库安装与常见问题解决完整指南

    点击蓝字 ! 关注我们 "Python小屋"编程比赛正式开始 推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国, ...

  7. python扩展库安装

    [centos下python扩展库安装] pip 是 Python 包管理工具,提供了对Python 包的查找.下载.安装.卸载的功能. python.org 上最新版本的安装包,都已经自带了该工具. ...

  8. python扩展包安装_python怎么安装扩展包

    以安装扩展包SymPy为例: 方式一: 格式:pip install xxx //xxx:包名 示例:pip install SymPy 方式二: 如果有安装Git,也可以使用pip+git的方式安装 ...

  9. python3.7扩展库是什么_Python3.4以后的版本中,____________库用于安装管理Python扩展包,________________库用于发布Python包。_学小易找答案...

    [填空题]Python3.4以后的版本中,____________库用于安装管理Python扩展包,________________库用于发布Python包. [判断题]Directions: The ...

最新文章

  1. ie focus bug
  2. python3精要(3)-python对象类型,数字,序列
  3. 十六、去年写的pandas使用方法梳理,2020年5月13日整理
  4. 每日程序C语言14-小球反弹高度问题
  5. Python模块: 命令行解析optionparser
  6. BeginnersBook Java 集合教程
  7. 开发 问卷调查案例_云南泸沽湖摩梭文化原真性保持与旅游开发协调研究
  8. Asp.net通过Gmail发送邮件
  9. 19电子设计速成实战宝典pdf_开发宝典丛书:Visual C++编程实战宝典PDF
  10. c语言程序分数化简,C ++中的简化分数
  11. 各省简称 拼音 缩写_省份简称拼音
  12. 备战数学建模34-BP神经网络预测2
  13. 地理信息系统(汤国安)重点整理和推导(第一章)
  14. 解压版tomcat安装配置
  15. 【Matplotlib:隐藏边框,显示单个网格线,设置刻度间隔,隐藏刻度线】
  16. armabi armabi-v7a armabi-v8a 区别
  17. 安卓插件化学习 - 类的加载
  18. 下一代个性化推荐系统
  19. GSM技术类有哪些最新发表的毕业论文呢?
  20. 陈泽天 java_百名“程序猿”捉对较量 600组小分队远程亮剑

热门文章

  1. html中支持透明图片的格式,IE6 png图片透明的解决方法教程
  2. CC00010.hadoop——|HadoopImpala.V10|——|Impala.v10|集群实现|负载均衡.v01|
  3. 加一度分享:快手PK抖音,谁更有优势
  4. 酸菜鱼,新一代微商暴富大机会?
  5. win2012 r2/win2016修改域密码复杂度策略
  6. 解决:Data truncation: Data too long for column ‘XXX‘ at row 1
  7. 电磁阀peakhold驱动
  8. 为skynet的crypt库扩展一些加密(摘要)算法支持
  9. CRISPR技术有效的防止脱靶现象方法
  10. 对视频文件进行简单的加密