⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000005.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 3 页
字号:
}
&nbsp;<BR>
&nbsp;<BR>static&nbsp;char&nbsp;tortoise_reset__doc__[]&nbsp;=
&nbsp;<BR>&quot;&quot;
&nbsp;<BR>;
&nbsp;<BR>
&nbsp;<BR>static&nbsp;PyObject&nbsp;*
&nbsp;<BR>tortoise_reset(self,&nbsp;args)
&nbsp;<BR>	PyObject&nbsp;*self;	/*&nbsp;Not&nbsp;used&nbsp;*/
&nbsp;<BR>	PyObject&nbsp;*args;
&nbsp;<BR>{
&nbsp;<BR>
&nbsp;<BR>	if&nbsp;(!PyArg_ParseTuple(args,&nbsp;&quot;&quot;))
&nbsp;<BR>		return&nbsp;NULL;
&nbsp;<BR>	currentX&nbsp;=&nbsp;currentY&nbsp;=&nbsp;WINDOW_SIZE/2;
&nbsp;<BR>	currentDirection&nbsp;=&nbsp;0.0;
&nbsp;<BR>	penDown&nbsp;=&nbsp;1;
&nbsp;<BR>	Py_INCREF(Py_None);
&nbsp;<BR>	return&nbsp;Py_None;
&nbsp;<BR>}
&nbsp;<BR>
&nbsp;<BR>static&nbsp;char&nbsp;tortoise_pendown__doc__[]&nbsp;=
&nbsp;<BR>&quot;&quot;
&nbsp;<BR>;
&nbsp;<BR>
&nbsp;<BR>static&nbsp;PyObject&nbsp;*
&nbsp;<BR>tortoise_pendown(self,&nbsp;args)
&nbsp;<BR>	PyObject&nbsp;*self;	/*&nbsp;Not&nbsp;used&nbsp;*/
&nbsp;<BR>	PyObject&nbsp;*args;
&nbsp;<BR>{
&nbsp;<BR>
&nbsp;<BR>	if&nbsp;(!PyArg_ParseTuple(args,&nbsp;&quot;&quot;))
&nbsp;<BR>		return&nbsp;NULL;
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;penDown&nbsp;=&nbsp;1;
&nbsp;<BR>	Py_INCREF(Py_None);
&nbsp;<BR>	return&nbsp;Py_None;
&nbsp;<BR>}
&nbsp;<BR>
&nbsp;<BR>static&nbsp;char&nbsp;tortoise_penup__doc__[]&nbsp;=
&nbsp;<BR>&quot;&quot;
&nbsp;<BR>;
&nbsp;<BR>
&nbsp;<BR>static&nbsp;PyObject&nbsp;*
&nbsp;<BR>tortoise_penup(self,&nbsp;args)
&nbsp;<BR>	PyObject&nbsp;*self;	/*&nbsp;Not&nbsp;used&nbsp;*/
&nbsp;<BR>	PyObject&nbsp;*args;
&nbsp;<BR>{
&nbsp;<BR>
&nbsp;<BR>	if&nbsp;(!PyArg_ParseTuple(args,&nbsp;&quot;&quot;))
&nbsp;<BR>		return&nbsp;NULL;
&nbsp;<BR>	penDown&nbsp;=&nbsp;0;
&nbsp;<BR>	Py_INCREF(Py_None);
&nbsp;<BR>	return&nbsp;Py_None;
&nbsp;<BR>}
&nbsp;<BR>
&nbsp;<BR>static&nbsp;char&nbsp;tortoise_turn__doc__[]&nbsp;=
&nbsp;<BR>&quot;&quot;
&nbsp;<BR>;
&nbsp;<BR>
&nbsp;<BR>static&nbsp;PyObject&nbsp;*
&nbsp;<BR>tortoise_turn(self,&nbsp;args)
&nbsp;<BR>	PyObject&nbsp;*self;	/*&nbsp;Not&nbsp;used&nbsp;*/
&nbsp;<BR>	PyObject&nbsp;*args;
&nbsp;<BR>{
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;degrees;
&nbsp;<BR>	if&nbsp;(!PyArg_ParseTuple(args,&nbsp;&quot;i&quot;,&nbsp;&amp;degrees))
&nbsp;<BR>		return&nbsp;NULL;
&nbsp;<BR>	currentDirection&nbsp;+=&nbsp;(double)degrees;
&nbsp;<BR>	Py_INCREF(Py_None);
&nbsp;<BR>	return&nbsp;Py_None;
&nbsp;<BR>}
&nbsp;<BR>
&nbsp;<BR>static&nbsp;char&nbsp;tortoise_move__doc__[]&nbsp;=
&nbsp;<BR>&quot;&quot;
&nbsp;<BR>;
&nbsp;<BR>
&nbsp;<BR>static&nbsp;PyObject&nbsp;*
&nbsp;<BR>tortoise_move(self,&nbsp;args)
&nbsp;<BR>	PyObject&nbsp;*self;	/*&nbsp;Not&nbsp;used&nbsp;*/
&nbsp;<BR>	PyObject&nbsp;*args;
&nbsp;<BR>{
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;steps;
&nbsp;<BR>	double&nbsp;newX,&nbsp;newY;
&nbsp;<BR>
&nbsp;<BR>	if&nbsp;(!PyArg_ParseTuple(args,&nbsp;&quot;i&quot;,&nbsp;&amp;steps))
&nbsp;<BR>		return&nbsp;NULL;
&nbsp;<BR>	/*&nbsp;first&nbsp;work&nbsp;out&nbsp;the&nbsp;new&nbsp;endpoint&nbsp;*/
&nbsp;<BR>	newX&nbsp;=&nbsp;currentX&nbsp;+&nbsp;sin(currentDirection*DEGREES_TO_RADIANS)*(double)steps;
&nbsp;<BR>	newY&nbsp;=&nbsp;currentY&nbsp;-&nbsp;cos(currentDirection*DEGREES_TO_RADIANS)*(double)steps;
&nbsp;<BR>	/*&nbsp;if&nbsp;the&nbsp;pen&nbsp;is&nbsp;down,&nbsp;draw&nbsp;a&nbsp;line&nbsp;*/
&nbsp;<BR>	if&nbsp;(penDown)&nbsp;XDrawLine(theDisplay,&nbsp;theWindow,&nbsp;theGC,&nbsp;
&nbsp;<BR>			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(int)currentX,&nbsp;(int)currentY,&nbsp;(int)newX,&nbsp;(int)newY);
&nbsp;<BR>	/*&nbsp;in&nbsp;either&nbsp;case,&nbsp;move&nbsp;the&nbsp;tortoise&nbsp;*/
&nbsp;<BR>	currentX&nbsp;=&nbsp;newX;
&nbsp;<BR>	currentY&nbsp;=&nbsp;newY;
&nbsp;<BR>
&nbsp;<BR>	Py_INCREF(Py_None);
&nbsp;<BR>	return&nbsp;Py_None;
&nbsp;<BR>}
&nbsp;<BR>
&nbsp;<BR>/*&nbsp;List&nbsp;of&nbsp;methods&nbsp;defined&nbsp;in&nbsp;the&nbsp;module&nbsp;*/
&nbsp;<BR>
&nbsp;<BR>static&nbsp;struct&nbsp;PyMethodDef&nbsp;tortoise_methods[]&nbsp;=&nbsp;{
&nbsp;<BR>&nbsp;{&quot;reset&quot;,	(PyCFunction)tortoise_reset,	METH_VARARGS,	tortoise_reset__doc__},
&nbsp;<BR>&nbsp;<BR>&nbsp;{&quot;pendown&quot;,	(PyCFunction)tortoise_pendown,	METH_VARARGS,	tortoise_pendown__do&nbsp;<BR>c__},
&nbsp;<BR>&nbsp;{&quot;penup&quot;,	(PyCFunction)tortoise_penup,	METH_VARARGS,	tortoise_penup__doc__},
&nbsp;<BR>&nbsp;<BR>&nbsp;{&quot;turn&quot;,	(PyCFunction)tortoise_turn,	METH_VARARGS,	tortoise_turn__doc__},
&nbsp;<BR>&nbsp;{&quot;move&quot;,	(PyCFunction)tortoise_move,	METH_VARARGS,	tortoise_move__doc__},
&nbsp;<BR>&nbsp;
&nbsp;<BR>&nbsp;{NULL,	&nbsp;(PyCFunction)NULL,&nbsp;0,&nbsp;NULL}		/*&nbsp;sentinel&nbsp;*/
&nbsp;<BR>};
&nbsp;<BR>
&nbsp;<BR>
&nbsp;<BR>/*&nbsp;Initialization&nbsp;function&nbsp;for&nbsp;the&nbsp;module&nbsp;(*must*&nbsp;be&nbsp;called&nbsp;inittortoise)&nbsp;*/
&nbsp;<BR>
&nbsp;<BR>static&nbsp;char&nbsp;tortoise_module_documentation[]&nbsp;=&nbsp;
&nbsp;<BR>&quot;&quot;
&nbsp;<BR>;
&nbsp;<BR>
&nbsp;<BR>void
&nbsp;<BR>inittortoise()
&nbsp;<BR>{
&nbsp;<BR>	PyObject&nbsp;*m,&nbsp;*d;
&nbsp;<BR>
&nbsp;<BR>	/*&nbsp;Init&nbsp;X&nbsp;and&nbsp;working&nbsp;window&nbsp;*/
&nbsp;<BR>	init_workspace();
&nbsp;<BR>
&nbsp;<BR>	/*&nbsp;Create&nbsp;the&nbsp;module&nbsp;and&nbsp;add&nbsp;the&nbsp;functions&nbsp;*/
&nbsp;<BR>	m&nbsp;=&nbsp;Py_InitModule4(&quot;tortoise&quot;,&nbsp;tortoise_methods,
&nbsp;<BR>		tortoise_module_documentation,
&nbsp;<BR>		(PyObject*)NULL,PYTHON_API_VERSION);
&nbsp;<BR>
&nbsp;<BR>	/*&nbsp;Add&nbsp;some&nbsp;symbolic&nbsp;constants&nbsp;to&nbsp;the&nbsp;module&nbsp;*/
&nbsp;<BR>	d&nbsp;=&nbsp;PyModule_GetDict(m);
&nbsp;<BR>	ErrorObject&nbsp;=&nbsp;PyString_FromString(&quot;tortoise.error&quot;);
&nbsp;<BR>	PyDict_SetItemString(d,&nbsp;&quot;error&quot;,&nbsp;ErrorObject);
&nbsp;<BR>
&nbsp;<BR>	/*&nbsp;XXXX&nbsp;Add&nbsp;constants&nbsp;here&nbsp;*/
&nbsp;<BR>	
&nbsp;<BR>	/*&nbsp;Check&nbsp;for&nbsp;errors&nbsp;*/
&nbsp;<BR>	if&nbsp;(PyErr_Occurred())
&nbsp;<BR>		Py_FatalError(&quot;can't&nbsp;initialize&nbsp;module&nbsp;tortoise&quot;);
&nbsp;<BR>}
&nbsp;<BR>
&nbsp;<BR>/*&nbsp;--------------------------------------------------------------&nbsp;*/
&nbsp;<BR>
&nbsp;<BR>	我们在运行一编my_make_shared,好,一切搞定!来试验一下吧?
&nbsp;<BR>
&nbsp;<BR>[root@zhouj&nbsp;extend]#&nbsp;python
&nbsp;<BR>Python&nbsp;1.5.2&nbsp;(#1,&nbsp;Nov&nbsp;25&nbsp;1999,&nbsp;14:59:15)&nbsp;&nbsp;[GCC&nbsp;2.95.2&nbsp;19991024&nbsp;(release)]&nbsp;on&nbsp;&nbsp;<BR>linux-i386
&nbsp;<BR>Copyright&nbsp;1991-1995&nbsp;Stichting&nbsp;Mathematisch&nbsp;Centrum,&nbsp;Amsterdam
&nbsp;<BR>><I>&gt;&gt;&nbsp;from&nbsp;tortoise&nbsp;import&nbsp;*
&nbsp;</I><BR>><I>&gt;&gt;&nbsp;dir()
&nbsp;</I><BR>['__builtins__',&nbsp;'__doc__',&nbsp;'__name__',&nbsp;'error',&nbsp;'move',&nbsp;'pendown',&nbsp;'penup',&nbsp;&nbsp;<BR>'reset',&nbsp;'turn']
&nbsp;<BR>><I>&gt;&gt;&nbsp;reset()
&nbsp;</I><BR>><I>&gt;&gt;&nbsp;move(100)
&nbsp;</I><BR>><I>&gt;&gt;&nbsp;for&nbsp;i&nbsp;in&nbsp;range(4):
&nbsp;</I><BR>...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;move(100)
&nbsp;<BR>...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;turn(90)
&nbsp;<BR>...&nbsp;
&nbsp;<BR>><I>&gt;&gt;&nbsp;
&nbsp;</I><BR>
&nbsp;<BR>	上面的命令在一个窗口里画了条线和一个正方型.而且是你敲入命令它就执行,很听话的&nbsp;<BR>海龟,就是Logo的感觉,嘿嘿.搞定!
&nbsp;<BR>	我们总结一下写一个python扩展模块的步骤吧:1,用modulator生成程序框架.2,修改框架&nbsp;<BR>,加入真正的功能代码.3,用make_shared或自己写makefile编译成.so动态库文件.4.没了&nbsp;<BR>∶<I>)
&nbsp;</I><BR>	
&nbsp;<BR>	上面的程序实在很简单,不过它向我们展示了用python作扩展模块是多么的容易,其实把&nbsp;<BR>python的嵌入就比扩展多一点点东西,如果你感性趣,去看Python自带文档的&lt;&lt;&nbsp;&nbsp;<BR>Extending&nbsp;and&nbsp;Embedding&nbsp;the&nbsp;Python&nbsp;Interpreter&nbsp;&gt;&gt;和python源程序的Demo/embed目&nbsp;<BR>录里的例子吧.其实python自己带的那么多模块也是用相同的方法作出来的,都放在&nbsp;<BR>Modules目录下面,也是非常好的例子.相信我,这些时间的付出将使你获得一个强大,灵活&nbsp;<BR>的工具.
&nbsp;<BR>	
&nbsp;<BR>注:
&nbsp;<BR>	几个月前看了MoneyMaker大虾一片介绍python的文章,从此倘徉在python的奇妙世界,收&nbsp;<BR>益非浅.python是个好东西,一直觉的好东西要大家一起分享:),所以边看无聊的春节晚会&nbsp;<BR>边写了上面这个东东,就作为我送给linux版各位的春节礼物吧,祝各位蛇年顺利,天天开心&nbsp;<BR>!&nbsp;And&nbsp;the&nbsp;same&nbsp;to&nbsp;myself&nbsp;;-)
&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR>※&nbsp;来源:·BBS&nbsp;水木清华站&nbsp;smth.org·[FROM:&nbsp;166.111.172.246]&nbsp;&nbsp;<BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -