Python论坛  - 讨论区

标题:[python-chinese] 求助:python与c合作的困惑

2005年12月02日 星期五 12:15

吴俊玉 wujunyu at gmail.com
Fri Dec 2 12:15:46 HKT 2005

刚才一封邮件大概是发错地方了!
有得从头再来!
为了在我的论文中加入解释执行机器智能,我找到PYTHON,但我是个十足的门外汉。抱着PYTHON 2。1
BIBLE看了一天有了点头绪,但遇到书中每讲的内容还是手足无措,望众高人指点一二!!!

P160
基本PYTHON扩展模块――SIMPLE.c
部分代码如下:
#include "python.h"

static PyObject *simple_add(PyObject *pSelf,PyObject *pArgs)
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
P461
pself参数是NULL,除非函数实际上是在C中设置的面向PYTHON类的方法
//-------------------------------------------------这句话困惑,说中并没有明确指出该如何处理-------------------------------------------------------------------------------
我按自己的想法作出如下处理:

#include 
#include "e:\\Python24\\include\\Python.h"
#include "dll.h"
#include 
#include 
#include 

/*class Tank
        {public:
         Tank()
         forward()
         backward()
         turn(int angle)
         private:
         int angle;             //方向角
         int x,y;               //x,y坐标
         int step;              //速度
        }
*/

//------------------------------------------------------------------------------
static PyObject *tank_forward(PyObject *pSelf,PyObject *pArgs)
{int angle,x,y,step;
 PyArg_ParseTuple(pSelf,"i(ii)i",∠,&x;,&y;,&step;);
 x+=(int)(step*cos(angle));
 y+=(int)(step*sin(angle));
 return Py_BuildValue("i(ii)i",angle,x,y,step);
}
//------------------------------------------------------------------------------
static char count_doc[]="Class Tank!";
//------------------------------------------------------------------------------
static PyMethodDef tank_methods[]=
{{"forword",tank_forward,METH_VARARGS,NULL},
 {NULL,NULL,0,NULL}
};

//------------------------------------------------------------------------------
DL_EXPORT(void) inittank()    //函数名必须是init*。而*是dll文件名!
{Py_InitModule("tank",tank_methods); //"*"也必须是dll文件名!
}
//------------------------------------------------------------------------------


BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being
called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;

      case DLL_PROCESS_DETACH:
        break;

      case DLL_THREAD_ATTACH:
        break;

      case DLL_THREAD_DETACH:
        break;
    }

    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}

===================================================================================================

以下是我的python脚本:

import tank

class mytank:
 "My tank!"
 def _init_(self,x=0,y=0,angle=45,step=2):
  self.x=x
  self.y=y
  self.angle=angle
  self.step=step
 def up(self):
  tank.forward()

a=mytank()
a.up()

===================================================================================================

事实上,目前为止,我还在困惑,python中的类居然可以随时添加属性。

模块是类还是对象是呢?如果我的tank模块中希望实现的是mytank类的方法,该如何实现呢?

======================我的意思是希望通过tank提供编程接口==================================================
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20051202/518bd469/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年12月02日 星期五 13:05

刘鑫 march.liu at gmail.com
Fri Dec 2 13:05:15 HKT 2005

你是要把C++提供给Python使用吧,如果是,可以使用Boost,我在Blog中有这方面讨论,地址见我签名。
Python是动态语言,允许在运行期改变行为。事实上它没有真正意义上的编译期(有一个用于优化性能的"编译器")。
以Python的方式思考,视模块为一种对象。在这个意义上,类也是一种对象。

--
欢迎访问:
http://blog.csdn.net/ccat

刘鑫
March.Liu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20051202/72d2578e/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年12月02日 星期五 13:31

wanderer at zte.com.cn wanderer at zte.com.cn
Fri Dec 2 13:31:53 HKT 2005

全是垃圾邮件, 退订!



***********************************************
信息安全声明:本邮件包含信息归ZTE所有,
ZTE对该邮件拥有所有权利。请接收者注意
保密,未经发件人书面许可,不得向任何第
三方组织和个人透露本邮件所含信息的全部
或部分。以上声明仅适用于工作邮件。
Information Security  Notice:
The information contained in this mail is
solely property of  ZTE Corporation. 
This mail communication is confidential.
Recipients named above are obligated to
maintain secrecy and are not permitted to
disclose the contents of this communication
to others.
***********************************************

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年12月05日 星期一 09:33

liyu liyu at ccoss.com.cn
Mon Dec 5 09:33:16 HKT 2005

吴俊玉 wrote:

> 刚才一封邮件大概是发错地方了!
> 有得从头再来!
> 为了在我的论文中加入解释执行机器智能,我找到PYTHON,但我是个十足的门外
> 汉。抱着PYTHON 2。1 BIBLE看了一天有了点头绪,但遇到书中每讲的内容还是
> 手足无措,望众高人指点一二!!!
> P160
> 基本PYTHON扩展模块――SIMPLE.c
> 部分代码如下:
> #include "python.h"
> static PyObject *simple_add(PyObject *pSelf,PyObject *pArgs)
> //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> P461
> pself参数是NULL,除非函数实际上是在C中设置的面向PYTHON类的方法
> //-------------------------------------------------这句话困惑,说中并
> 没有明确指出该如何处理------------------------------------------------
> ------------------ -------------

self相当于C++中的this指针呗,它当然只对某对象的方法有关喽.

至少这个self如何使用, 你可以使用一些"武林绝学"从那里获得自己私用的一些数
据结构呀什么的.



[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年12月07日 星期三 18:38

吴俊玉 wujunyu at gmail.com
Wed Dec 7 18:38:24 HKT 2005

事实上我也就是那么理解的,只是为什么不行呢?还望指点。
static PyObject *tank_forward(PyObject *pSelf,PyObject *pArgs)
{int angle,x,y,step;
 PyArg_ParseTuple(pSelf,"i(ii)i",∠,&x;,&y;,&step;);
 x+=(int)(step*cos(angle));
 y+=(int)(step*sin(angle));
 return Py_BuildValue("i(ii)i",angle,x,y,step);
}
我的PSELF结构如下:

/*class Tank
        {public:
         Tank()
         forward()
         backward()
         turn(int angle)
         private:
         int angle;             //方向角
         int x,y;               //x,y坐标
         int step;              //速度
        }
*/

当然这是PYTHON中的结构,这里应该没有问题吧!

我的脚本也在上面了,只是PYTHON脚本的报错不太理解,所以不会解决!至于报错信息,这里没有编译器,无法生成DLL,所以没办法提供给各位,见谅!

高手如果不介意的话,编译一下,顺便指点一二!

谢谢!!!!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20051207/1ca85d8d/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年12月07日 星期三 23:12

Junstyle junstyle at yeah.net
Wed Dec 7 23:12:58 HKT 2005

用了一下WingIDE感觉不错,自动提示功能比Pythonwin强多了,对初学者方便多了。
哪位大哥有破解版,或哪里有下的,请告知!谢了~~
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20051207/b28f1928/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年12月08日 星期四 00:15

Water Ye叶春水 waterye at gmail.com
Thu Dec 8 00:15:28 HKT 2005

www.crackdb.com上找找, 好像有的

在05-12-7,Junstyle <junstyle at yeah.net> 写道:
>
> 用了一下WingIDE感觉不错,自动提示功能比Pythonwin强多了,对初学者方便多了。
> 哪位大哥有破解版,或哪里有下的,请告知!谢了~~
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20051208/2227eeef/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年12月08日 星期四 08:38

limodou limodou at gmail.com
Thu Dec 8 08:38:53 HKT 2005

在 05-12-7,Junstyle<junstyle at yeah.net> 写道:
>
> 用了一下WingIDE感觉不错,自动提示功能比Pythonwin强多了,对初学者方便多了。
> 哪位大哥有破解版,或哪里有下的,请告知!谢了~~

请不要讨论关于破解之类的问题。

--
I like python!
My Blog: http://www.donews.net/limodou
NewEdit Maillist: http://groups.google.com/group/NewEdit

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年12月08日 星期四 09:23

吴俊玉 wujunyu at gmail.com
Thu Dec 8 09:23:35 HKT 2005

昨天晚上思考了一下,发现一个问题,望高手解答:
在我的实现中,我是把PSELF当THIS指针用的,但是光这样还不够吧!
比如:
我的static PyObject *tank_forward(PyObject *pSelf,PyObject *pArgs)
功能是将坦克位置前移,
可是我只在这里要求一个PYTHON的任意类型,而没有指定该操作static PyObject *tank_forward(PyObject
*pSelf,PyObject *pArgs)是PYTHON中类的成员方法?
//-----------------------------------------------------------------------------------------
如果我在PYTHON中的类是
/*class Tank
        {public:
         Tank()
         forward()
         backward()
         turn(int angle)
         private:
         int angle;             //方向角
         int x,y;               //x,y坐标
         int step;              //速度
        }
*/不好意思用的是C++,实在不熟悉PYTHON,就不班门弄斧了。
//-----------------------------------------------------------------------------------------
我该怎么指定static PyObject *tank_forward(PyObject *pSelf,PyObject *pArgs)是class
Tank的成员函数呢?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20051208/a791cc3e/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年12月08日 星期四 12:15

prolibertine prolibertine at gmail.com
Thu Dec 8 12:15:51 HKT 2005

我也使用过wingide,感觉不错,不过他的persional版本好像可以得到使用的id,用适用的就可以了,30天,好像是。

--
/**********************************************************
* Love in Gentoo-Linux  C and Python
* Look at my website and my blog
* http://www.jnlinux.org
* http://bbs.jnlinux.org
**********************************************************/

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年12月08日 星期四 13:06

liyu liyu at ccoss.com.cn
Thu Dec 8 13:06:37 HKT 2005

吴俊玉 wrote:

> 事实上我也就是那么理解的,只是为什么不行呢?还望指点。
> static PyObject *tank_forward(PyObject *pSelf,PyObject *pArgs)
> {int angle,x,y,step;
> PyArg_ParseTuple(pSelf,"i(ii)i",∠,&x;,&y;,&step;);
> x+=(int)(step*cos(angle));
> y+=(int)(step*sin(angle));
> return Py_BuildValue("i(ii)i",angle,x,y,step);
> }
> 我的PSELF结构如下:
>
> /*class Tank
> {public:
> Tank()
> forward()
> backward()
> turn(int angle)
> private:
> int angle; //方向角
> int x,y; //x,y坐标
> int step; //速度
> }
> */
>
> 当然这是PYTHON中的结构,这里应该没有问题吧!
>
> 我的脚本也在上面了,只是PYTHON脚本的报错不太理解,所以不会解决!至于报
> 错信息,这里没有编译器,无法生成DLL,所以没办法提供给各位,见谅!
>
> 高手如果不介意的话,编译一下,顺便指点一二!
>
> 谢谢!!!!
>
>------------------------------------------------------------------------
>
>  
>
看不出来哦~最好把可以编译的代码完整的PASTE出来。
还有,错误提示是什么呀?



[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号