点击进入项目 一.C层面模块添加API 我们仍然操作如下结构体, #include <math.h> typedef struct Point { double x,y; } Point; 本节目标是封装两个Point结构体的操作函数为sample库的C级API,可以被sample以外的C库调用,首先写出以下函数指针结构体实例, /* pysample.c */ static PyObject *PyPoint_FromPoint(Point *p, int must_free) { /* 胶…
点击进入项目 一.C语言运行pyfun的PyObject对象 思路是在C语言中提供实参,传给python函数: 获取py函数对象(PyObject),函数参数(C类型) 获取GIL(PyGILState_Ensure) 确保fun对象可调用 参数转换为python对应类型(Py_BuildValue) 调用python函数(PyObject_Call) 确定调用无异常 检查返回值 释放GIL(PyGILState_Release) 异常处理 #include "Python.h" /*…
不依靠其他工具,直接使用Python的扩展API来编写一些简单的C扩展模块. 本篇参考PythonCookbook第15节和Python核心编程完成,值得注意的是,Python2.X和Python3.X在扩展库写法上略有不同,我们研究的是3.X写法. 一.源文件 Extest2.c C函数本体 c文件头必须包含"Python.h"头,以调用接口函数 这里面写了两个c函数,模块名称定为Extest #include "Python.h" #include <st…
点击进入项目 这里的数组要点在于: 数组结构,array.array或者numpy.array 本篇的数组仅限一维,不过基础的C数组也是一维 一.分块讲解 源函数 /* Average values in an array */ double avg(double *a, int n) { int i; double total = 0.0; for (i = 0; i < n; i++) { total += a[i]; } return total / n; } 封装函数 /* Call d…
GIL操作 想让C扩展代码和Python解释器中的其他进程一起正确的执行, 那么你就需要去释放并重新获取全局解释器锁(GIL). 在Python接口封装中去释放并重新获取全局解释器锁(GIL),此时本段程序失去GIL运行,其他线程可以无视本函数的运行而运行,直到Py_END_ALLOW_THREADS: #include "Python.h" ... PyObject *pyfunc(PyObject *self, PyObject *args) { ... Py_BEGIN_ALLO…
点击进入项目 C函数源文件 /* sample.c */ #include "sample.h" /* Compute the greatest common divisor */ int gcd(int x, int y) { int g = y; while (x > 0) { g = x; x = y % x; y = g; } return g; } /* Test if (x0,y0) is in the Mandelbrot set or not */ int in_…
点击进入项目 一.Python生成C语言结构体 C语言中的结构体传给Python时会被封装为胶囊(Capsule), 我们想要一个如下结构体进行运算,则需要Python传入x.y两个浮点数, typedef struct Point { double x,y; } Point; 然后对这两个浮点数解析后生成C中Point的结构体,如下, /* Create a new Point object */ static PyObject *py_Point(PyObject *self, PyObje…
多变量赋值 a = [1,2,(3,4)] b,c,d = a print(b,c,d) b,c,(d,e) = a print(b,c,d,e) 1 2 (3, 4) 1 2 3 4 a = "zxc" b,c,d = a print(b,c,d) z x c *:集成不定长元素 & 集合型实参展开为多个虚参 record = ('Dave', 'dave@example.com', '773-555-1212', '847-555-1212') name, email, *…
一.字典元素排序 dict.keys(),dict.values(),dict.items() 结合max.min.sorted.zip进行排序是个很好的办法,另外注意不使用zip时,字典的lambda操作方法: price = { 'a':1, 'b':2, 'c':3 } # 多个键的值相同时会采取元组比较的形式,实际应用时注意 min_p = min(zip(price.values(), price.keys())) max_p = max(zip(price.values(), pri…
github地址 使用Cython导入库的话,需要一下几个文件: .c:C函数源码 .h:C函数头 .pxd:Cython函数头 .pyx:包装函数 setup.py:python 本节示例.c和.h文件同『Python CoolBook』使用ctypes访问C代码_下_demo进阶即存在sample.c和sample.h两个源文件. cdef:Cython函数,只能在Cython中调用,python识别不了这个定义后面的主体,而且它后面也不仅仅接函数,class等均可,def定义的函数可以被P…
数组运算加速是至关科学计算重要的领域,本节我们以一个简单函数为例,使用C语言为python数组加速. 一.Cython 本函数为一维数组修剪最大最小值 version1 @cython.boundscheck(False) @cython.wraparound(False) cpdef clip(double[:] a, double min, double max, double[:] out): ''' Clip the values in a to be between min and m…
点击进入项目 这一次我们尝试一下略微复杂的c程序. 一.C程序 头文件: #ifndef __SAMPLE_H__ #define __SAMPLE_H__ #include <math.h> #ifdef __cplusplus extern "C" { #endif int gcd(int x, int y); int in_mandel(double x0, double y0, int n); int divide(int a, int b, int *remain…
一.动态库文件生成 源文件hello.c #include "hello.h" #include <stdio.h> void hello(const char *name) { printf("Hello %s!\n", name); } int factorial(int n) { if (n < 2) return 1; return factorial(n - 1) * n; } /* Compute the greatest common…
C++ 标准库没有提供日期类型,使用C预压的日期和事件操作. 使用时引入头文件  <ctime> . 四个和事件相关的函数: clock_t // 系统时间和日期表示为某种整数time_t // 系统时间和日期表示为某种整数size_t // 系统时间和日期表示为某种整数tm // 表示为结构体 struct tm{ int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; i…
早期的操作系统软件主要是用汇编语言(包括UNIX操作系统在内)编写的.由于汇编语言依赖于计算机硬件,所以程序的可读性和可移植性都比较差,所以呢,为了提高操作系统软件的可读性和可移植性,最好改用高级语言.但是呢,一些高级语言又难以实现汇编语言的某些功能(汇编语言可以直接对硬件进行操作,例如对内存地址的操作.位操作等).所以人们希望找到一种兼顾一般高级语言和低级语言的优点的语言,于是,C语言就在这种情况下诞生了. C语言是在B语言的基础上发展起来的,它的根源可以追溯到ALGOL60. 1960年出现…
基础知识 Python3内置函数 『Python』库安装 『流畅的Python』第1~4章_数据结构.编码 『Python』基础数据结构常见使用方法 『Python CoolBook』数据结构和算法_多变量赋值&“*”的两种用法 『Python CoolBook:Collections』数据结构和算法_collections.deque队列&yield应用 『Python CoolBook:heapq』数据结构和算法_heapq堆队列算法&容器排序 『Python CoolBook…
本篇代码针对2.X版本,与3.X版本细节不尽相同,由于两者架构差别不大加之本人能力有限,所以就使用2.X体验python的底层原理了. 一.主要文件夹内容 Include :该目录下包含了Python提供的所有头文件,如果用户需要自己用C或C++来编写自定义模块扩展Python,那么就需要用到这里提供的头文件. Lib :该目录包含了Python自带的所有标准库,Lib中的库都是用Python语言编写的. Modules :该文件夹中包含了所有用C语言编写的模块,比如ramdom,cString…
20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 小组成员 20172313 余坤澎 20172332 于欣月 20172326 康皓越 小组编程照片 设计思路 通过一个Element和Num类来作为基本元素获得表达式 通过一个Expression来将各个元素组合起来 通过Cal将表达式计算出来 通过用户类将结果计算出来,并判断其正负 重要代码 public void getNum() { Random num = new Random(); numerator =…
首更: 由于TensorFlow的奇怪形式,所以载入保存的是sess,把会话中当前激活的变量保存下来,所以必须保证(其他网络也要求这个)保存网络和载入网络的结构一致,且变量名称必须一致,这是caffe...好吧,caffe也没有这种python风格的设定... 废话少说,导入包: import numpy as np import tensorflow as tf 保存会话: W = tf.Variable([[1,2,3],[4,5,6]],dtype=tf.float32) b = tf.V…
零.资料集合 知乎专栏:Bob学步 知乎提问:如何高效的学习 TensorFlow 代码?. 大佬刘光聪(Github,简书) 开源书:TensorFlow Internals,强烈推荐(本博客参考书) TensorFlow架构与设计:编程模型 TensorFlow架构与设计:概述 TensorFlow架构与设计:会话生命周期 TensorFlow架构与设计:图模块 TensorFlow架构与设计:OP本质论 TensorFlow架构与设计:变量初始化 大佬姚健(Github) 系列文章(图片?…
20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址: http://www.cnblogs.com/20172307hyt/p/8975967.html 需求分析 功能要求 1.自动生成题目 可独立使用(能实现自己编写测试类单独生成题目的功能) 可生成不同等级题目,类似于: 1级题目:2 + 5 =: 10 - 5 = 之类的两个数,一个运算符的题目 2.题目运算(判题) 可独立使用 实现中缀表达…
20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 结对伙伴 20172326康皓越 博客地址(http://www.cnblogs.com/326477465-a/p/9011498.html) 20172332于欣月 博客地址(http://www.cnblogs.com/yu757503836/p/9011486.html) 小组结对编程照片 个人贡献度划分 余坤澎 于欣月 康皓越 个人贡献度 30% 40% 30% 设计思路 设计一个num类和一个Element…
20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 小组成员 20172326康皓越 20172313余坤澎 20172332于欣月 小组编程照片 设计思路 设计一个生成符号类 包括加减乘除和括号 设计一个数类 包括整数和分数 设计一个表达式类 需要调用符号类和数类. 设计一个运算类 对生成的表达式进行处理, 然后使之转换成后缀表达式, 进而计算出后缀表达式的值. 添加判断对错和正确率的方法. 在后续的扩展中设计一个文本处理类 实现将生成题目写入文件中 从文件中读取题目…
本篇文章用于对Kivy框架官方所给出的一个「乒乓球」小游戏的源码进行简单地解析.我会尽可能的将方方面面的内容都说清楚.在文章的最下方为官方所给出的这个小游戏的教程以及游戏源码. 由于篇幅所限,本文只简单介绍Kivy框架,对于Python语言的简介,请大家通过别的文章进行学习. Kivy简介 Kivy 是基于Python编程语言的一种用于开发跨平台GUI客户端程序的框架.可以打包成iOS.Android.Windows.OSX等多种平台.目前已经实现一次编码,到处运行的目的. Kivy框架主要包含…
『开发技巧』Python音频操作工具PyAudio上手教程 ​ 0.引子 当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包. PyAudio是Python开源工具包,由名思义,是提供对语音操作的工具包.提供录音播放处理等功能,可以视作语音领域的OpenCv. 1.简介 PyAudio为跨平台音频I / O库PortAudio提供Python 绑定.使用PyAudio,您可以轻松地使用Python在各种平台上播放和录制音频…
2017-2018-2 165X 『Java程序设计』课程 结对编程练习_四则运算 经过第一阶段的学习,同学们已经熟悉了这门语言基本的用法.在一次又一次对着电脑编写并提交代码,进行练习的时候,有没有觉得孤单又无趣?这次我们来体验一种新的开发模式--结对编程,让你和小伙伴一起分析,一起思考,一起测试,一起完善,在思维的碰撞中体验结对编程的魅力! --------CONTENTS-------- 1.题目描述 2.测试说明 3.提交要求 附:参考资料 1.题目描述 邹欣老师在<现代软件工程讲义 3…
2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第二周 博客要求 组内同学需各自发表博客 博客中需包含以下内容: 相关过程截图 关键代码解释 遇到的困难及解决方法 写出项目中自己负责的部分 个人贡献度划分(按百分比给小组各成员划分贡献度,各成员贡献之和为100%) 对结对的小伙伴做出评价给出小伙伴博客链接(重点指出需要改进的地方) 给出项目的码云链接 给出小组结对编程照片 博客内容中如需展示团队的共同成果,请进行说明 如有参考或引用的设计.实现,请进行说…
2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算 组队成员: 仇夏 学号: 20172310 博客地址: @王志伟 四则运算第一周博客 @仇夏四则运算第一周博客 @王志伟 四则运算第二周博客 @仇夏四则运算第二周博客 结对照片: 1.进度进程: 1.上周进度: 已完成: - 完成了生成中缀表达式的类. - 完成了main函数用来运行的类. - 中缀表达式转化成后缀表达式的类 - 后缀表达式的计算. - 去重. - 代码的完善与美化. 待完成: - 将生成的题…
2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算 组队成员: 仇夏 学号: 20172310 博客地址:点击这里 1. 需求分析: 可生成题目: - 输入要想生成的题目个数,输出随机等级的一组题目. - 运算符随机等概率(加减乘除).运算数随机等概率(整数.真分数). 判题系统: - 用户输入答案,计算机之后产生正确答案. - 答题结束后给出答题正确率. 关于真分数 - 运算数中含有真分数. - 运算结果中含有真分数,践行分数的运算法则. 关于拓展 - 包括…
2017-2018-2 20165225『Java程序设计』课程 结对编程练习_四则运算 需求分析: 支持整数,可进行多运算符运算,有优先级. 设计思路: 在有括号的情况下,先计算得出括号中的结果,如果没有括号,则运算按照先乘除,后加减进行. UML类图: 暂时实现不了. 功能截图: (未能实现优先级和括号) 结对感受: 很开心这个又一次的合作,不过同时也明白了自己的不足,目前能实现的东西真的不多.两个人确实能想到很多,也能相互学习到许多,总的来说还是挺有满足感的. 结对编程的照片: 码云链接…