首页 > 编程知识 正文

自定义python扩展类型,python常用的扩展模块

时间:2023-12-27 22:27:25 阅读:326036 作者:LUHJ

本文目录一览:

python扩展的c代码在哪里写

在哪里写都可以啊,重要的是编译过程。给你介绍下编译过程吧。

在windows和linux下面,对C扩展的编译方法是不一样的,我们先来看windows版的。

我们用C实现一个简单的加法。

首先新建一个文件add.c,代码如下:

#include Python.h;

static PyObject* add(PyObject *self, PyObject *args); 

//一定声明为static,把他们限制在这个文件范围里。 几乎所有的参数都是PyObject类型,在python,每个东西都是object。 

static PyObject* add(PyObject* self, PyObject* args) 

    int x=0 ; 

    int y=0;

    int z=0;

    if (! PyArg_ParseTuple(args, "i|i", x, y))

        return NULL;

    /*第一个参数是self,这个是python用的, 每个函数都要有。我们暂时不管。args是一个参数列表。她把所有的参数都整合成一个string。所以 

      我们需要从这个string里来解析我们的参数。PyArg_ParseTuple来完成这个任务。第一个参数是args, 就是我们要转换的参数。第二个是格式符号。

      “s”代表是个string。 从args里提取一个参数就写"s", 两个的话就写"s|s", 如果是一个string,一个int,就写"s|i", 和printf差不多。第三个

      参数就是提取出来的参数放置的真正位置。必须传递这个参数的地址。对于add, 他将提取两个参数。分别是x和y。*/

    z=x+y;

    return Py_BuildValue("i", z);

    /*调用完之后我们需要返回结果。这个结果是c的type或者是我们自己定义的类型。必须把他转换成PyObject, 让python认识。这个用Py_BuildValue 

      来完成。他是PyArg_ParseTuple的逆过程。他的第一个参数和PyArg_ParseTuple的第二个参数一样, 是个格式化符号。第三个参数 

      是我们需要转换的参数。Py_BuildValue会把所有的返回只组装成一个tutple给python。*/

static PyMethodDef addMethods[] =

    {"add",  add, METH_VARARGS, "Execute a shell command."}, 

    {NULL, NULL, 0, NULL}

}; 

/*这个是一个c的结构。他来完成一个映射。 我们需要把我们扩展的函数都映射到这个表里。表的第一个字段是python真正认识的。是python  里的方法名字。 第二个字段是python里的这个方法名字的具体实现的函数名。 在python里调用add, 真正执行的是用c写的add函数。第三个字段是METH_VARARGS, 他告诉python,add是调用c函数来实现的。第四个字段是这个函数的说明。如果你在python里来help这个函数,将显示这个说明。相当于在python里的函数的文档说明。*/

PyMODINIT_FUNC initadd() 

    Py_InitModule("add", addMethods); 

/*注意,这个函数的名字不能改动。 必须是init+模块名字。 我们的模块名字是add。所以这个函数是initadd()。

  这样python在导入add 的模块时候,才会找到这个函数,并调用。这个函数调用Py_InitModule来将模块名字和映射表结合在一起。 他表示,add这个模块使用addMethods这个映射表。python应该这样导入我们的module的.*/

新建一个setup.py,内容如下:

from distutils.core import setup, Extension 

module1 = Extension('add', sources = ['add.c']) 

setup (name = 'PackageName', version = '1.0', description = 'This is a demo package', ext_modules= [module1])

组建:(由于我的机器上装了mingw,所以指定了mingw32。默认的编译器是vs2008。参考:

python setup.py build --compiler=mingw32

执行后会在当前目录生成一个build目录及文件:

buildlib.win32-2.6add.pyd

将add.pyd拷贝到当前目录,并写一个测试文件test.py,代码如下:

import add

print add.add(3,4)

执行一下,输出为7

OK,基本上就是如此了。

在linux下的话,会有少许不同.

即直接用makefile将add.c编译成.so,python可以直接import,makefile代码如下:

PYLIB = /usr/bin

PYINC = /usr/include/python2.6

all: add.c

        gcc add.c -g -I$(PYINC) -shared -L$(PYLIB) -lpython2.6 -o add.so

clean:

        rm -f add.so

用同样的测试代码,可以测试通过。

如何在python中添加自定义模块

通过文件进行设置

在Python的安装目录下,找到 Libsite-packages 文件夹,在该文件夹下新建一个以.pth为后缀名的文件,编辑文件,内容为要添加的库路径。(我的文件名命名为..pth)。添加路径示例:文件内容写入要引用的库路径

步骤1:建立文件,可以首先建立一个文本文档,写下路径如D:\Python\mulib

步骤2:保存文档时,将文件类型选为所有,文件名为 setpath.pth。文件名为什么无所谓,主要是只有当文档类型选为所有,才可以定义文件类型为.pth

步骤3:将保存好的文件放在Python的site-packages文件夹中就完成了。

python的数据类型有哪些?

第一种:整数

python可以处理任意大小的整数,当然包含负整数,在python程序中,整数的表示方法和数学上的写法一模一样,比如:1,100,-8080,0,等。

计算机由于使用二进制,所以有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,比如:0xff00。

第二种:浮点数

浮点数也就是小数,之所以称为浮点数,是因为按照科学计数法表示时,一个浮点数的小数点位置是可变的。浮点数可以用数学写法,比如1.23,3.15,-9.01等。但是对于很大或者很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x10^9就是1.23e9。

整数和浮点数在计算机内部存储的方法是不同的,整数运算永远是精确的,而浮点数运算则可能会有四舍五入的误差。

第三种:字符串

字符串是以“或”括起来的任意文本,比如'abc','xyz'等。请注意,“或”本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。

第四个:布尔值

布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在python中,可以直接用True、False表示布尔值,也可以通过布尔运算计算出来。

布尔值可以用and、or或not运算。

and运算是与运算,只有所有都为True,and运算结果才是True。

or运算是或运算,只要其中有一个为True,or运算结果就是True。

not运算是非运算,它是一个单目运算符,把True变成False,False变成True。

第五个:空值

空值是python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

此外,python还提供了列表、字典等多种数据类型,还允许创建自定义数据类型。

Windows系统中如何安装Python扩展模块

Python是非常灵活的语言,我们可以在它的基础上安装很多的扩展模块。那么如何在Windows系统中安装Python扩展模块呢?下面我给大家分享一下。

工具/材料

CMD命令行

自定义安装

首先我们需要自己手动下载Python扩展模块,这里我随便找了个模块,大家根据自己需要寻找,如下图所示

接下来我们进入扩展模块的文件夹,复制地址栏里面的路径,如下图所示

然后我们按下Win+R组合键打开运行界面,在输入框中输入cmd命令,如下图所示

接着就会打开CMD命令行界面,我们输入cd命令,然后粘贴刚才复制的路径,如下图所示

最后进入模块文件夹以后我们执行python setup.py install命令进行安装,如下图所示

pip自动安装

自动安装就不需要自己下载模块了,首先我们进入Python安装目录的Scripts文件夹并复制路径,如下图所示

然后在命令行中通过cd命令进入这个目录,如下图所示

接着通过pip命令进行模块的自动下载,注意pip的语法,如下图所示

最后安装好了以后我们就可以到Python安装目录下的site-packages文件夹下面看是否已安装成功,如下图所示

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。