用c的写python模块的演示

转载 2012年03月26日 00:30:53

引用http://www.douban.com/note/19345973/


用c的写python模块的演示

2008-10-06 14:05:19
不说话,贴代码

uuxx/test.py

________________________

#!/usr/bin/env python

import uuxx
for i in range(111):
    filename=uuxx.uufilename()
    print filename,len(filename)

________________________

uuxx/setup.py
________________________

#!/usr/bin/python

from distutils.core import setup, Extension
setup(
    name = "uuxx",
    version = "1.1",
    author = "zsp",
    author_email = "zsp007@gmail.com",
    url = "http://zsp.javaeye.com",
    description = "uuid for more things",
    license = "GPL",
    classifiers = [
        "License :: GPL",
        "Programming Language :: C++"],
    ext_modules = [
        Extension(
            "uuxx",
            ["uuxx.cpp"],
            include_dirs = ["/usr/include/"],
            libraries = ["uuid","util"]
        )
    ]
    )

________________________


uuxx.cpp
________________________

 

extern "C" {
#include <uuid/uuid.h>
#include <Python.h>
}

void base64_encode(const void * pdata,const unsigned long data_size, void * out_pcode)
{
static const unsigned char base64char[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_!" ;

if (data_size <=0 ) return ;

const unsigned char * pS = (const unsigned char *)pdata;
const unsigned char * pSEnd = &pS[data_size];
unsigned char * pD =(unsigned char *)out_pcode;

for (;pS <pSEnd-2 ;pS+=3 ,pD+=4 )
{
pD[0 ] = base64char[pS[0 ]>> 2 ];
pD[1 ] = base64char[0x3F & (pS[0 ] <<4 | pS[1 ]>> 4 )];
pD[2 ] = base64char[0x3F & (pS[1 ] <<2 | pS[2 ]>> 6 )];
pD[3 ] = base64char[0x3F & pS[2 ];
}

//static const unsigned char BASE64_PADDING='=';
switch (pSEnd-pS)
{
case 1 :
pD[0 ]=base64char[pS[0 ]>> 2 ];
pD[1 ]=base64char[0x3F & (pS[0 ] <<4 )];
//pD[2] = BASE64_PADDING;
//pD[3] = BASE64_PADDING ;
break ;
case 2 :
pD[0 ]=base64char[pS[0 ]>> 2 ];
pD[1 ]=base64char[0x3F & (pS[0 ] <<4 | pS[1 ]>> 4 )];
pD[2 ]=base64char[0x3F & (pS[1 ] <<2 )];
//pD[3] = BASE64_PADDING ;
break ;
}
};
PyObject * uufilename(PyObject * args,PyObject *kwds){
    uuid_t uu;
    uuid_generate( uu );

    //用的改造过的base64的编码+改造的uuid

    static const unsigned data_size=16 ;
    static const int b64_length = (data_size+2 )/3 *4 -2 ;
 
    char b64uu[data_size];

    base64_encode(uu,data_size,b64uu);
    PyObject *value = PyString_FromStringAndSize(b64uu,b64_length);
    return value;
};
PyDoc_STRVAR(uufilename__doc__,
    "uufilename"
);
static PyMethodDef uuxx_methods[] = {
  {
    "uufilename" ,
    uufilename,
    METH_VARARGS,
    uufilename__doc__
},
{NULL, NULL, 0 , NULL}

};

PyMODINIT_FUNC inituuxx(){
  Py_InitModule("uuxx" , uuxx_methods);
}

【Python】使用C语言来扩展Python模块

在做毕业设计的时候,我用Python来实现项目的应用层,底层的驱动由于对时间要求比较严格(微秒级),用Python会出问题,毕竟Python就不是用来做底层开发的。这就涉及到在Python中使用C程序...
  • wr132
  • wr132
  • 2017年04月21日 09:00
  • 320

Python 扩展使用 C/C++ 给 Python 写扩展模块的方法

本文来自作者 gashero 在 GitChat 上分享「Python 的 C 扩展开发惯例」,「阅读原文」查看交流实录 「文末高能」 编辑 | 嘉仔 目录 1   简介    ...
  • GitChat
  • GitChat
  • 2017年11月15日 00:00
  • 1332

(Python编程)一个简单的C扩展模块

Programming Python, 3rd Edition 翻译最新版本见:http://wiki.woodpecker.org.cn/moin/PP3eD22.4. A Simple C Ext...
  • jq0123
  • jq0123
  • 2006年11月10日 10:39
  • 11550

扩展Python__在python脚本中使用其他语言(c/c++/java/c#)编写的模块

1.在Python使用java代码 (1)编写java程序 (2)使用javac将java源文件编译为*.class字节码文件 (3)编写python脚本文件(其中直接import java字节码文件...
  • wangjianno2
  • wangjianno2
  • 2016年04月02日 02:28
  • 576

使用C++来写Python扩展模块

1.起因     众所周知,python在处理一些计算量大的任务时效率很低,不仅仅是执行速率,还有内存占用上,比如下面一段代码就可以让你的电脑卡得不行: alist = [i for i in x...
  • hechaoyuyu
  • hechaoyuyu
  • 2011年11月03日 21:19
  • 1632

C语言实现的Python扩展模块

file: sample.c #include //C function int add(int arg1, int arg2) {     return arg1 + a...
  • zxygww
  • zxygww
  • 2015年10月13日 14:23
  • 1774

不要把 Python 写成 C 语言版的 Python

如果你像我一样,大学第一门编程语言是以 C 语言开始的,再学 Python 的时候可能还是忘不掉 C 语言的那种编程思维。 举例: 1、数值计算类(举一个小学生都会算的题):从1到100中取出所有偶数...
  • Mister_Wisdom
  • Mister_Wisdom
  • 2015年08月29日 01:29
  • 1045

python自己编写模块

python自己编写模块        摘要:我们在学习Python的过程中,经常会有重复的代码,或者项目工程过大,这个时候我们把一些代码写成模块的形式调用时很方便的,同时学会怎么编写模块,也有助于...
  • xz1308579340
  • xz1308579340
  • 2017年03月31日 10:29
  • 3898

用c写python的拓展模块

用c写python的拓展模块
  • myfirstzz
  • myfirstzz
  • 2016年12月12日 16:30
  • 109

Python.PyGanme -- 用Python写游戏

用Python和Pygame写游戏-从入门到精通 http://eyehere.net/2011/python-pygame-novice-professional-1/...
  • eofguo
  • eofguo
  • 2016年10月08日 21:07
  • 997
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用c的写python模块的演示
举报原因:
原因补充:

(最多只允许输入30个字)