python 教程 第二十一章、 扩展Python

第二十一章、 扩展Python

/* D:\Python27\Lib\Extest-1.0\Extest2.c */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "Python.h"

int fac(int n)
{
    if (n < 2) return(1);
    return (n)*fac(n-1);
}

static PyObject *
Extest_fac(PyObject *self, PyObject *args)
{
    int num;
    if (!PyArg_ParseTuple(args, "i", &num))
        return NULL;
    return (PyObject*)Py_BuildValue("i", fac(num));
}

static PyMethodDef
ExtestMethods[] =
{
    { "fac", Extest_fac, METH_VARARGS },
    { NULL, NULL },
};

void initExtest()
{
    Py_InitModule("Extest", ExtestMethods);
} 
#!/usr/bin/env python
# D:\Python27\Lib\Extest-1.0\setup.py
from distutils.core import setup, Extension

MOD = 'Extest'
setup(name=MOD, ext_modules=[
Extension(MOD, sources=['Extest2.c'])])

将Extest2.c和setup.py放入 Extest-1.0目录下
安装MinGW编译环境(mingw-get-inst-20110530.exe)
下载http://sourceforge.net/projects/mingw/

D:\Python27\Lib\Extest-1.0>python setup.py install build --compiler=mingw32

测试一下

>>> import Extest
>>> Extest.fac(10)
3628800
>>>
时间: 2024-09-23 11:23:21

python 教程 第二十一章、 扩展Python的相关文章

python 教程 第十一章、 异常

第十一章. 异常 1)    try/except/else格式 try: s = raw_input('--> ') except EOFError: print 'Why did you do an EOF on me?' except: print 'Error occurred.' else: print 'Done' except参数说明: except:             Catch all (or all other) exception types. except name

java编程思想-java编程四线第二十一章 线程SynchronizationComparisons.java有错误

问题描述 java编程四线第二十一章 线程SynchronizationComparisons.java有错误 //BaseLine 和AtomicTest 是线程不安全的 ,求解答 //: concurrency/SynchronizationComparisons.java// Comparing the performance of explicit Locks// and Atomics versus the synchronized keyword.import java.util.c

python 教程 第二十二章、 其它应用

第二十二章. 其它应用 1)    Web服务 ##代码 s 000063.SZ ##开盘 o 26.60 ##最高 h 27.05 ##最低 g 26.52 ##最新 l1 26.66 ##涨跌 c1 -0.04 ##涨幅 p2 -0.15% ##总手 v 9190865 ##日期 d1 6/15/2011 ##时间 t1 3:00am #!/usr/bin/env python from time import ctime from urllib import urlopen import

python 教程 第十七章、 网络编程

第十七章. 网络编程 1)    FTP客户端 import ftplib import os import socket HOST = '127.0.0.1' DIRN = 'menus' FILE = 'hello.txt' USER = 'taojin' PASS = 'pass123' def main(): try: f = ftplib.FTP(HOST) f.login(user = USER, passwd = PASS) f.cwd(DIRN) f.retrbinary('RE

python 教程 第十三章、 特殊的方法

第十三章. 特殊的方法 1)    特殊的方法 __init__(self,...) 这个方法在新建对象恰好要被返回使用之前被调用. __del__(self) 恰好在对象要被删除之前调用. __str__(self) 在我们对对象使用print语句或是使用str()的时候调用. __lt__(self,other) 当使用 小于 运算符(<)的时候调用.类似地,对于所有的运算符(+,>等等)都有特殊的方法. __getitem__(self,key) 使用x[key]索引操作符的时候调用.

python 教程 第二十章、 数据库编程

第二十章. 数据库编程 环境设置 1).安装MySQL-python http://www.lfd.uci.edu/~gohlke/pythonlibs/ MySQL-python-1.2.3.win32-py2.7.exe 1)    使用数据库接口 import MySQLdb cxn = MySQLdb.Connect(host = '127.0.0.1', user = 'root', passwd = 'root') cur = cxn.cursor() try: cur.execut

数据结构教程 第二十一课 树、二叉树定义及术语

教学目的: 掌握树.二叉树的基本概念和术语,二叉树的性质 教学重点: 二叉树的定义.二叉树的性质 教学难点: 二叉树的性质 授课内容: 一.树的定义: 树是n(n>=0)个结点的有限集.在任意一棵非空树中: (1)有且仅有一个特定的称为根的结点: (2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,...Tm,其中每一个集合本身又是一棵树,并且称为根的子树. 二.树的基本概念: 树的结点包含一个数据元素及若干指向其子树的分支. 结点拥有的子树数称为结点的度. 度为0

Python教程专题

可爱的Python: [anygui]项目预览 可爱的Python: 用于PalmOS的Python 可爱的Python: 用基于生成器的状态机和协同程序增加效率 可爱的Python: 用Python生成器实现"轻便线程" 可爱的Python: 使用Spark模块解析 可爱的Python: 使用SimpleParse模块进行解析 可爱的Python: 迭代器和简单生成器 可爱的Python: pydoc和distutils模块 可爱的Python: Numerical Python 可

使用C语言来扩展Python程序和Zope服务器的教程_python

有几个原因使您可能想用 C 扩展 Zope.最可能的是您有一个已能帮您做些事的现成的 C 库,但是您对把它转换成 Python 却不感兴趣.此外,由于 Python 是解释性语言,所以任何被大量调用的 Python 代码都将降低您的速度.因此,即使您已经用 Python 写了一些扩展,您仍然要考虑把其中最常被调用的部分改用 C 来写.不论哪种方式,扩展 Zope 都是从扩展 Python 开始.此外,扩展 Python 会给您带来其它的好处,因为您的代码将可以从任何 Python 脚本访问,而不