﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-任我行-随笔分类-Python</title><link>http://www.cppblog.com/oosky/category/109.html</link><description>一天一个脚印......
&lt;br&gt;每日一句: &lt;script language="javascript" charset="utf-8" src="http://sl.iciba.com/spdshow.php"&gt;&lt;/script&gt;</description><language>zh-cn</language><lastBuildDate>Mon, 19 May 2008 13:18:42 GMT</lastBuildDate><pubDate>Mon, 19 May 2008 13:18:42 GMT</pubDate><ttl>60</ttl><item><title>C++ 扩展和嵌入 Python</title><link>http://www.cppblog.com/oosky/archive/2005/11/02/896.html</link><dc:creator>任我行</dc:creator><author>任我行</author><pubDate>Wed, 02 Nov 2005 06:57:00 GMT</pubDate><guid>http://www.cppblog.com/oosky/archive/2005/11/02/896.html</guid><wfw:comment>http://www.cppblog.com/oosky/comments/896.html</wfw:comment><comments>http://www.cppblog.com/oosky/archive/2005/11/02/896.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/oosky/comments/commentRss/896.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/oosky/services/trackbacks/896.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1. 把Python嵌入到C++应用程序中，在C++程序中调用Python函数和获得变量的值； <br>2. 用C++为Python编写扩展模块(动态链接库)，在Python程序中调用C++开发的扩展功能函数。&nbsp;&nbsp;<a href='http://www.cppblog.com/oosky/archive/2005/11/02/896.html'>阅读全文</a><img src ="http://www.cppblog.com/oosky/aggbug/896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/oosky/" target="_blank">任我行</a> 2005-11-02 14:57 <a href="http://www.cppblog.com/oosky/archive/2005/11/02/896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从游戏开始Python学习之路。。。</title><link>http://www.cppblog.com/oosky/archive/2005/10/12/664.html</link><dc:creator>任我行</dc:creator><author>任我行</author><pubDate>Wed, 12 Oct 2005 11:47:00 GMT</pubDate><guid>http://www.cppblog.com/oosky/archive/2005/10/12/664.html</guid><wfw:comment>http://www.cppblog.com/oosky/comments/664.html</wfw:comment><comments>http://www.cppblog.com/oosky/archive/2005/10/12/664.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/oosky/comments/commentRss/664.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/oosky/services/trackbacks/664.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 从游戏开始: 第二天: 守夜人: 终篇: 课后检讨:一切从游戏开始:故事虚构, 是从一个真的游戏再综合新闻组的内容而来. 缘起: 这是一个晴朗的星期六下午, 你悠闲地在网上浏览. 忽然间你看到一个留言板上的小游戏. 它很简单, 问题是: 把五个数字&nbsp;56789,&nbsp;放到&nbsp;{{{[][][]&nbsp;*&nbsp;[][],&...&nbsp;&nbsp;<a href='http://www.cppblog.com/oosky/archive/2005/10/12/664.html'>阅读全文</a><img src ="http://www.cppblog.com/oosky/aggbug/664.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/oosky/" target="_blank">任我行</a> 2005-10-12 19:47 <a href="http://www.cppblog.com/oosky/archive/2005/10/12/664.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Python几种开发工具介绍</title><link>http://www.cppblog.com/oosky/archive/2005/10/12/660.html</link><dc:creator>任我行</dc:creator><author>任我行</author><pubDate>Wed, 12 Oct 2005 06:36:00 GMT</pubDate><guid>http://www.cppblog.com/oosky/archive/2005/10/12/660.html</guid><wfw:comment>http://www.cppblog.com/oosky/comments/660.html</wfw:comment><comments>http://www.cppblog.com/oosky/archive/2005/10/12/660.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/oosky/comments/commentRss/660.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/oosky/services/trackbacks/660.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: st1\:*{behavior:url(#ieooui) }1 IDLE1.1 IDLE是python创初人Guido van Rossum使用python and Tkinter来创建的一个集成开发环境。要使用IDLE必须安装python and Tkinter。1.2 特性：自动缩进，彩色编码，命令历史(Alt+p,Alt+n)和单词自动(Alt+/)完成。...&nbsp;&nbsp;<a href='http://www.cppblog.com/oosky/archive/2005/10/12/660.html'>阅读全文</a><img src ="http://www.cppblog.com/oosky/aggbug/660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/oosky/" target="_blank">任我行</a> 2005-10-12 14:36 <a href="http://www.cppblog.com/oosky/archive/2005/10/12/660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>py2exe工具簡介</title><link>http://www.cppblog.com/oosky/archive/2005/10/12/657.html</link><dc:creator>任我行</dc:creator><author>任我行</author><pubDate>Wed, 12 Oct 2005 02:59:00 GMT</pubDate><guid>http://www.cppblog.com/oosky/archive/2005/10/12/657.html</guid><wfw:comment>http://www.cppblog.com/oosky/comments/657.html</wfw:comment><comments>http://www.cppblog.com/oosky/archive/2005/10/12/657.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/oosky/comments/commentRss/657.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/oosky/services/trackbacks/657.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: py2exe 能夠把 Python script 轉換成在 windows 上獨立執行(即不需額外安裝 Python)的 exe 檔(加上其它必須的執行期函式庫)。對於不考虑跨平台的發佈來說,非常方便。&nbsp;&nbsp;<a href='http://www.cppblog.com/oosky/archive/2005/10/12/657.html'>阅读全文</a><img src ="http://www.cppblog.com/oosky/aggbug/657.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/oosky/" target="_blank">任我行</a> 2005-10-12 10:59 <a href="http://www.cppblog.com/oosky/archive/2005/10/12/657.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Python学习（四）</title><link>http://www.cppblog.com/oosky/archive/2005/10/11/648.html</link><dc:creator>任我行</dc:creator><author>任我行</author><pubDate>Tue, 11 Oct 2005 09:02:00 GMT</pubDate><guid>http://www.cppblog.com/oosky/archive/2005/10/11/648.html</guid><wfw:comment>http://www.cppblog.com/oosky/comments/648.html</wfw:comment><comments>http://www.cppblog.com/oosky/archive/2005/10/11/648.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/oosky/comments/commentRss/648.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/oosky/services/trackbacks/648.html</trackback:ping><description><![CDATA[<STRONG>
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-1342436837907284";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_channel ="2319024336";
google_color_border = "F8F9FC";
google_color_bg = "F8F9FC";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></SCRIPT>

<SCRIPT src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript>
</SCRIPT>
</STRONG>
<DIV>Div into Python的最后一篇笔记<A name=more></A><BR>
<P>23、类属性<BR>&nbsp;&nbsp;&nbsp;&nbsp;1)类属性是一个类的属性，在创建任何类实例之前就有效了。类属性既可以通过直接对类的引用，也可以通过对类的任意实例的引用来使用。<BR>&nbsp;&nbsp;&nbsp;&nbsp;2)类属性可以作为类级别的常量来使用，但是它们不是真正的常量，可以修改它们。<BR>&nbsp;&nbsp;&nbsp;&nbsp;3)__class__ 是每个类实例的一个内置属性(也是每个类的),它是一个类的引用，而 self 是一个类的实例</P><BR>
<P>24、私有<BR>&nbsp;&nbsp;&nbsp;&nbsp;1)python有私有函数、私有类方法和私有属性，它们不能被从模块外（或类外）调用。<BR>&nbsp;&nbsp;&nbsp;&nbsp;2)如果一个Python函数的名字，类方法，或属性以两个下划线开始(但不是结束)，它是私有的；其它所有的都是公有的。<BR>&nbsp;&nbsp;&nbsp;&nbsp;3)Python没有类方法保护的概念(只能用于它们自已的类和子父中)。类方法要不私有(只能在它们自已的类中使用)要不公有(任何地方都可使用)。</P><BR>
<P>25、异常<BR>&nbsp;&nbsp;&nbsp;&nbsp;1)一个 try...except ,try后面的块是要监听的块，有异常时执行except后的块。还可以有一条 else 子句，就象 if 语句。如果在 try 块中没有异常引发，然后 else 子句被执行。<BR>&nbsp;&nbsp;&nbsp;&nbsp;2)一个try ... finally，finally后的块总被执行。</P><BR>
<P>26、文件对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;1)Python有一个内置函数open，用来打开在磁盘上的文件。open 返回一个文件对象，它拥有一些方法和属性，可以得到打开文件的信息，和对打开文件进行操作。<BR>&nbsp;&nbsp;&nbsp;&nbsp;2)open 方法可以接收三个参数：文件名，模式，和缓冲区参数。只有第一个参数，文件名，是必须的；其它两个是可选的。如果没有指定，文件以文本方式打开。<BR>&nbsp;&nbsp;&nbsp;&nbsp;3)文件对象的mode属性，标明文件属性以何种方式被打开<BR>&nbsp;&nbsp;&nbsp;&nbsp;4)文件对象的 name 属性标明文件对象所打开的文件名。<BR>&nbsp;&nbsp;&nbsp;&nbsp;5)文件对象的 tell 方法指明在打开文件中的当前位置<BR>&nbsp;&nbsp;&nbsp;&nbsp;6)文件对象的 seek 方法在打开文件中移动到另一个位置。第二个参数指出第一个参数是什么意思：0 表示移动到一个绝对位置(从文件开始算起)，1 表示移到一个相对位置(从当前位置算起)，还有 2 表示对于文件尾的一个相对位置。<BR>&nbsp;&nbsp;&nbsp;&nbsp;7)read 方法从打开文件中读取指定个数的字节，并且返回含有读取数据的字符串。可选参数指定了读取的最大字节数。如果没有指定参数，read 将读到文件末尾。<BR>&nbsp;&nbsp;&nbsp;&nbsp;8)文件对象的 closed 属性表示对象是否打开或关闭了文件<BR>&nbsp;&nbsp;&nbsp;&nbsp;9)调用文件对象的 close 方法来关闭一个文件，以释放掉你加在文件上的锁(如果有的话)，刷新被缓冲的系统确实还未写入的输出(如果有的话)，并且翻放系统资源。closed 属性证实了文件被关闭了。<BR>&nbsp;&nbsp;&nbsp;&nbsp;10)当文件被关闭后，文件对象所对应的变量仍然存在，直到超出作用域，或被删除，此时所有的对文件的操作（close除外）都会抛出异常，close只是静静地失败。</P><BR>
<P>27、python有for循环<BR>28、赋值<BR>&nbsp;&nbsp;&nbsp;&nbsp;1)使用一个序列或列表一次给多个变量赋值，如下例<BR>&gt;&gt;&gt; v = ('a', 'b', 'e')<BR>&gt;&gt;&gt; (x, y, z) = v <BR>&gt;&gt;&gt; (x, y, z) = range(3) <BR>&nbsp;&nbsp;&nbsp;&nbsp;2)内置函数range接受一个表示上限的参数，返回一个从0开始的整数列表。<BR>&nbsp;&nbsp;&nbsp;&nbsp;3)如果一个函数返回一个序列或列表，则可将它组赋值给一组变量，就象函数一次返回一组值一样。如：<BR>&gt;&gt;&gt; (filepath, filename) = os.path.split("/music/ap/mahadeva.mp3") <BR>&gt;&gt;&gt; (shortname, extension) = os.path.splitext(filename) <BR></P></DIV><img src ="http://www.cppblog.com/oosky/aggbug/648.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/oosky/" target="_blank">任我行</a> 2005-10-11 17:02 <a href="http://www.cppblog.com/oosky/archive/2005/10/11/648.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Python学习（三）</title><link>http://www.cppblog.com/oosky/archive/2005/10/11/647.html</link><dc:creator>任我行</dc:creator><author>任我行</author><pubDate>Tue, 11 Oct 2005 09:01:00 GMT</pubDate><guid>http://www.cppblog.com/oosky/archive/2005/10/11/647.html</guid><wfw:comment>http://www.cppblog.com/oosky/comments/647.html</wfw:comment><comments>http://www.cppblog.com/oosky/archive/2005/10/11/647.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/oosky/comments/commentRss/647.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/oosky/services/trackbacks/647.html</trackback:ping><description><![CDATA[<STRONG>
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-1342436837907284";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_channel ="2319024336";
google_color_border = "F8F9FC";
google_color_bg = "F8F9FC";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></SCRIPT>

<SCRIPT src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript>
</SCRIPT>
</STRONG>
<DIV>继续Dive Into Python.<A name=more></A><BR>
<P>20、定义类<BR>&nbsp;&nbsp;&nbsp;&nbsp;以FileInfo类的定义为例<BR>from UserDict import UserDict<BR>class FileInfo(UserDict): <BR>"store file metadata" <BR>def __init__(self, filename=None): <BR>UserDict.__init__(self) <BR>self["name"] = filename <BR>&nbsp;&nbsp;&nbsp;&nbsp;1)父类放在类名后的小括号内；<BR>&nbsp;&nbsp;&nbsp;&nbsp;2)类可以有文档字符串<BR>&nbsp;&nbsp;&nbsp;&nbsp;3)__init__函数在对象被创建后被自动调用的第一个函数，可以指定任何个数的参数。<BR>&nbsp;&nbsp;&nbsp;&nbsp;4)惯例，__init__应为类中第一个定义的方法，其第一个参数指向类的当前实例的第一个引用，且应命之为self。__init__中要显式地调用父类的__init__方法。<BR>&nbsp;&nbsp;&nbsp;&nbsp;5)__init__无返回值。<BR>&nbsp;&nbsp;&nbsp;&nbsp;6)__init__的定义是可选的，一旦定义必须显式调用父类的__init__方法。<BR>&nbsp;&nbsp;&nbsp;&nbsp;7)除了可自由定义的普通的类方法，还有一些可以定义的专用方法。专用方法是在特殊情况下或当使用特别语法时由Python替你调用的，而不是在代码中直接调用(象普通的方法那样)。也就是说，python提供了一种方法，可以将非方法调用语法映射到方法调用上。最常见是__getitem__和__setitem__方法。例如，在上例中增加两个方法的定义，就可以实现方便的取值和赋值：<BR>def __getitem__(self, key): return self.data[key]<BR>def __setitem__(self, key, item): self.data[key] = item<BR>&gt;f = fileinfo.FileInfo("/music/_singles/kairo.mp3")<BR>&gt;f[“name”]<BR>&gt;f[“anothername”]=...<BR>&nbsp;&nbsp;&nbsp;&nbsp;8)__repr__专用函数，返回一个对象的字符串表示。Python用内置函数repr来显示变量的值，如果repr的参数是某个对象时，那用它的类的__repr__返回对象的字符串表示。<BR>&nbsp;&nbsp;&nbsp;&nbsp;9)__cmp__专用函数，在比较类实例时被调用。即当作==比较时，被调用。<BR>&nbsp;&nbsp;&nbsp;&nbsp;10)__len__专用函数，当调用内置函数len(instance)时被调用，对字符串返回字符的个数，对字典返回关键字的个数，对序列或列表返回元素个数。对自由定义的类，可自由定义返回的len的值的含义。：)<BR>&nbsp;&nbsp;&nbsp;&nbsp;11)__delitem__专用函数， 在调用 del instance[key]被调用。<BR>&nbsp;&nbsp;&nbsp;&nbsp;12)__setitem__,__getitem__,__cmp__,__len__,等方法加入到类的定义中后，可以使任何类看起来象“字典”。还有其它的一些专用方法，可以使类看起来象数值一样可以对它进行运行。</P><BR>
<P>21、类的实例化和清除<BR>&nbsp;&nbsp;&nbsp;&nbsp;1)象调用函数一样调用类，就可以实例化一个类，传入的参数是__init__定义的参数(参数是以从右向左的顺序传递给__init__的，python会自动添加self)，返回一个实例对象。<BR>&nbsp;&nbsp;&nbsp;&nbsp;2)一个类的所有实例，共享类的文档字符串，<BR>&nbsp;&nbsp;&nbsp;&nbsp;3)python采用引用计数的技术进行垃圾回收，因而维护着对第一个创建的实例的引用的列表，当计数为0时，实例自动被破坏。<BR>&nbsp;&nbsp;&nbsp;&nbsp;4)不用显式的释放一个实例，因为当变量超出作用域时自动失效，而至其所对应的实例的引用数减一。<BR>&nbsp;&nbsp;&nbsp;&nbsp;5)在Python中，你不能子类化象字符串、列表和字典的内置数据类型。作为补偿，Python附带了封装类，可以模拟这些内置的数据类型的行为： UserString，UserList，和 UserDict。<BR>&nbsp;&nbsp;&nbsp;&nbsp;6)子类中定义的方法覆盖父类的方法，python不支持函数重载。由此，子类的__init__与父类的__init__的参数序列可以有较大的不同。<BR>&nbsp;&nbsp;&nbsp;&nbsp;7)python支持数据属性，即C++中所谓的“数据成员”，对其值的引用需要以"实例名.属性名"的方式。<FONT color=#ff0000><INS>注意，数据属性是类实例拥有的属性，还有一种属性是叫属性，是类所拥有的</INS><BR></FONT>&nbsp;&nbsp;&nbsp;&nbsp;8)<BR>22、当:号后面的块(即需要缩进的内容)只有一条语句时，可以直接将此语句放在:后面。<BR></P></DIV><img src ="http://www.cppblog.com/oosky/aggbug/647.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/oosky/" target="_blank">任我行</a> 2005-10-11 17:01 <a href="http://www.cppblog.com/oosky/archive/2005/10/11/647.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Python学习（二）</title><link>http://www.cppblog.com/oosky/archive/2005/10/11/646.html</link><dc:creator>任我行</dc:creator><author>任我行</author><pubDate>Tue, 11 Oct 2005 09:00:00 GMT</pubDate><guid>http://www.cppblog.com/oosky/archive/2005/10/11/646.html</guid><wfw:comment>http://www.cppblog.com/oosky/comments/646.html</wfw:comment><comments>http://www.cppblog.com/oosky/archive/2005/10/11/646.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/oosky/comments/commentRss/646.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/oosky/services/trackbacks/646.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天继续dive into python.12、列表与字符串　　1)用一个字符串对象的join 方法将列表元素连接成单个字符串，此字符串充当分隔符。　　2)join 只用用于字符串列表；它不进行任何的类型强制转换。连接一个存在一个或多个非字符串元素的列表将引发一个异常。　　3)用一个字符串对象的split 方法将列表元素连接成单个字符串，此字符串充当分隔符。　　4)split 接受一个可选的第...&nbsp;&nbsp;<a href='http://www.cppblog.com/oosky/archive/2005/10/11/646.html'>阅读全文</a><img src ="http://www.cppblog.com/oosky/aggbug/646.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/oosky/" target="_blank">任我行</a> 2005-10-11 17:00 <a href="http://www.cppblog.com/oosky/archive/2005/10/11/646.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Python学习（一）</title><link>http://www.cppblog.com/oosky/archive/2005/10/11/645.html</link><dc:creator>任我行</dc:creator><author>任我行</author><pubDate>Tue, 11 Oct 2005 08:51:00 GMT</pubDate><guid>http://www.cppblog.com/oosky/archive/2005/10/11/645.html</guid><wfw:comment>http://www.cppblog.com/oosky/comments/645.html</wfw:comment><comments>http://www.cppblog.com/oosky/archive/2005/10/11/645.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/oosky/comments/commentRss/645.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/oosky/services/trackbacks/645.html</trackback:ping><description><![CDATA[<DIV>一、下载安装<BR>最新版本:2.4.2<BR>Windows<BR>　　下载 Python-2.4.2.exe,运行安装<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <A href="http://www.python.org/ftp/python/2.4.2/python-2.4.2.msi"><FONT color=#6fbc4c>&nbsp;http://www.python.org/ftp/python/2.4.2/python-2.4.2.msi</FONT></A><A href="http://10.1.204.2/tool/compiler&amp;IDE/Python-2.3.2-1.exe"></A><BR><BR>
<P>其它平台<BR>　　下载 Python-2.4.2.tgz 或 Python-2.4.2.tar.bz2,<BR>　　tar -zxvf Python-2.4.2.tgz 或bzcat Python-2.4.2.tar.bz2 | tar -xf -<BR>　　./configure<BR>　　make<BR>　　make install<BR>二、语法<BR>1、函数声明<BR>关键字 def 为函数声明的开始，不区分有返回值的函数与无返回值的函数。它没有子程序，全部都是函数。<BR>函数没有定义返回的数据类型。如果函数执行了一个 return 语句，它将返回一个值，否则会返回 None (Python的空值)。<BR>参数 params 并不需要指明数据类型</P><BR>
<P>2、文档字符串<BR>任何在三重双引号中的东西都是函数的文档字符串，它们用来说明函数可以做什么。<BR>如果存在文档字符串，它必须要在函数中的被首先定义(也就是说在冒号后面被定义)。<BR>文档字符串在运行时可作为函数的属性。</P><BR>
<P>3、在Python中每个东西都是对象<BR>并且几乎每个东西都有属性和方法。<BR>所有的函数都有一个内置的属性 __doc__，它会返回在函数源代码中定义的文档字符串。</P><BR>
<P>4、缩排代码<BR>Python函数没有明显的 begin 或 end，或任何括号或大括号来标识函数开始结束。唯一的分隔是通过一个冒号(:)和代码本身的缩排来表示。<BR>代码块(函数，if 语句，for 循环，等等)通过它们的缩排来定义。缩排表示块的开始，非缩排表示结束，不存在明显的括号，大括号，或关键字。这就意味着空白是有意义的，并且要一致。</P><BR>
<P>5、if __name__<BR>在 if 表达式周围不需要小括号<BR>象C语言一样，Python使用 == 进行比较，使用 = 进行赋值。<BR>模块是对象，并且所有的模块都有一个内置属性 __name__。如果 import 模块，那么 __name__ 的值通常为模块的文件名，不带路径或者文件扩展名。如果直接运行模块， __name__ 的值将是一个特别的缺省值， __main__。<BR>通过在程序中加入下一个if，就可以很简单地实现单元测试。<BR>if __name__ == "__main__":</P><BR>
<P>6、字典<BR>Python的内置数据类型之一是字典，它在关键字与值之间定义了一对一的关系。这一点就象Perl中的关联数组，Java中的 Map ，或VBScipt中的 Scripting.Dictionary 对象。如：<BR>&gt;&gt;&gt; d = {"server":"mpilgrim", "database":"master"}<BR>1)每一个元素都是一个键-值对，整个元素集合用大括号括起来,赋值给变量d.<BR>2)server 是一个键字，它所关联的值为 mpilgrim，用 d["server"] 来引用.<BR>3)你可以通过键字来得到值，但是不能通过值得到键字。<BR>&gt;&gt;&gt; d["database"] = "pubs"<BR>4)可如上式一样修改字典.<BR>5)不能在一个字典中有重复的键字。给一个存在的键字赋值会抹掉原来的值。<BR>6)可以在任何时候加入新的键-值对。这种语法同修改存在的值一样。<BR>7)字典没有元素顺序的概念。<BR>8)字典的值可以是任意数据类型，包括字符串，整数，对象，或者甚至其它的字典。<BR>9)字典的关键字要严格一些，但是它们可以是字符串，整数和几种其它的类型<BR>&gt;&gt;&gt; del d['server'] <BR>10)可如上式一样删除元素<BR>&gt;&gt;&gt; d.clear()<BR>11)可如上式一样清空所有元素</P><BR>
<P>7、列表<BR>1)个列表是一个用方括号包括的有序元素集。<BR>&gt;&gt;&gt; li = ["a", "b", "mpilgrim", "z", "example"]<BR>2)可如上式定义列表<BR>3)一个列表可以象一个以0开始的数组一样使用。任何一个非空列表的第一个元素总是 xxx[0]。<BR>4)负数索引从列表的尾部开始向后计数存取元素。li[n] == li[n – len(li)]，如：<BR>&gt;&gt;&gt; li[-3]<BR>结果为"mpilgrim"。<BR>5)任何一个非空的列表最后一个元素总是 li[-1]。<BR>6)你可以通过指定2个索引得到列表的子集，叫做一个“分片”。返回值是一个新的列表，它包含了列表中按顺序从第一个分片索引开始，直到但是不包括第二个分片索引的所有元素。<BR>7)如果一个或两个分片索引是负数，分片也可以工作,但如果两个索引的所代表的位置大者在前则返回空列表。<BR>8)如果任一个分片索引为0，你可以将其省略，默认为0。所以li[:3]同li[0:3] 一样。<BR>9)li[:n] 将总是返回前 n 个元素，而 li[n:] 将返回其它的元素。<BR>10)如果两个分片索引均省略，将包括列表的所有元素。但是与原始的列表 li 不是同一个，它是一个新的列表，恰好拥有与 li 全部一样的元素。li[:] 是生成一个列表拷贝的缩写。<BR>11)append 增加单个元素到列表的尾部。如：<BR>&gt;&gt;&gt; li.append("new")<BR>12)insert 在列表中插入单个元素。数值参数是使得列表增加的第一个元素的索引(注意，不是序号).如下：<BR>&gt;&gt;&gt; li.insert(2, "new") <BR>13)列表元素不需要唯一<BR>14)用extend 连接列表。注意不要用多个参数调用 extend ，要使用一个列表参数调用。如下：<BR>&gt;&gt;&gt; li.extend(["two", "elements"])<BR>15)index 在列表中查找值第一次的出现并返回索引值<BR>&gt;&gt;&gt; li.index("example")<BR>16)如果在列表中没有找到值，Python会引发一个异常<BR>17)要测试一个值是否在列表内，使用 in，如果值找到了，它返回 1 ，或者没找到则为 0 。(在Python中不存在布尔类型。在一个布尔上下文中(象 if 语句)，0 是假，所有其它的数值为真。这一点也可以扩展到其它类型。一个空串("")，一个空列表([])，和一个空字典({})都是假，所有其它的字符串，列表，和字典是真。)如：<BR>&gt;&gt;&gt; "new" in li <BR>18)remove 从列表中除掉第一次出现的值。(仅第一次出现的值),如：<BR>&gt;&gt;&gt; li.remove("new")<BR>19)如果在列表中没有找到值，Python引发一个异常。它反映了 index 方法的行为。<BR>20)用pop除掉列表的最后一个元素，然后返回除掉的值。注意这一点同 li[-1]不同，后者返回一个值但不改变列表，也不同于 li.remove(value)，后者改变列表但不返回值。如：<BR>&gt;&gt;&gt; li.pop() <BR>21)列表也可以用 + 操作符连接起来。list = list + otherlist 相当于 list.extend(otherlist)。但是 + 操作符将连接后的列表作为一个值返回，而 extend 仅修改存在的列表。如：<BR>&gt;&gt;&gt; li = li + ['example', 'new']<BR>22)Python支持 += 操作符。li += ['two'] 相当于 li = li + ['two']。+= 操作符可用于列表，字符串，和整数，并且它也可以在用户定义类中被重载。<BR>23)* 操作符作为一个重复符可用在列表上。li = [1, 2] * 3 相当于 li = [1, 2] + [1, 2] + [1, 2]， 将三个列表连成一个。</P><BR>
<P>8、序列<BR>1)序列是不可变列表。一旦创建了一个序列就不能以任何方式改变它。<BR>2)序列的定义同列表的定义方式相同，除了整个元素集是用小括号包围的而不是方括号<BR>3)当分割一个列表时，会得到一个新的列表；当分割一个序列时，会得到一个新的序列。<BR>4)序列没有方法,所以不能查找、删除和增加元素，但可以用in来检查元素是否在序列里。<BR>5)序列比列表操作速度快。<BR>6)序列可以在字典中被用作关键字，但是列表不行。<BR>7)内置的 tuple 函数接收一个列表，返回一个有着相同元素的序列。而 list 函数接收一个序列，返回一个列表。从效果上看，tuple 冻结一个列表，而 list 解冻一个序列。<BR>8)序列用在字符串格式化.<BR>9、变量<BR>1)Python象大多数其它语言一样有局部和全局变量，但是它没有明显的变量声明。变量通过赋值产生，当超出作用范围时自动消灭。<BR>2)当一条命令用续行符(“\”)分割成多行时，后续的行可以以任何方式缩排，Python通常的严格的缩排规则不需遵守。<BR>3)严格地讲，在小括号，方括号或大括号中的表达式(如定义字典)可以用或者不用续行符(“\”)分割成多行。<BR>4)Python不允许你引用一个未被赋值的变量，试图这样做会引发一个异常。</P><BR>
<P>10、字符串格式化<BR>1)基本语法如下：<BR>"带占位符的字符串" % (参数序列)<BR>2)试图将一个字符串同一个非字符串连接会引发一个异常。字符串连接只能在每个都是字符串时起作用。此时选择格式化串会是个不错的主意。</P><BR>
<P>11、映射<BR>1)基本语法如下：<BR>[ 函数或表达式 for 循环变量 in 列表/序列 ]<BR>2)映射是通过循环遍历一个列表/序列，并对每个元素应用一个函数，然后返回一个包含为计算后的值的新列表。<BR>3)注意列表映射不改变被映射的列表。<BR>4)新列表拥有与原有列表/序列拥有相同数量的元素数</P></DIV><img src ="http://www.cppblog.com/oosky/aggbug/645.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/oosky/" target="_blank">任我行</a> 2005-10-11 16:51 <a href="http://www.cppblog.com/oosky/archive/2005/10/11/645.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Python完全新手教程(lesson11-lesson13)</title><link>http://www.cppblog.com/oosky/archive/2005/10/11/644.html</link><dc:creator>任我行</dc:creator><author>任我行</author><pubDate>Tue, 11 Oct 2005 08:41:00 GMT</pubDate><guid>http://www.cppblog.com/oosky/archive/2005/10/11/644.html</guid><wfw:comment>http://www.cppblog.com/oosky/comments/644.html</wfw:comment><comments>http://www.cppblog.com/oosky/archive/2005/10/11/644.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/oosky/comments/commentRss/644.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/oosky/services/trackbacks/644.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/oosky/archive/2005/10/11/644.html'>阅读全文</a><img src ="http://www.cppblog.com/oosky/aggbug/644.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/oosky/" target="_blank">任我行</a> 2005-10-11 16:41 <a href="http://www.cppblog.com/oosky/archive/2005/10/11/644.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Python完全新手教程(lesson5-lesson10)</title><link>http://www.cppblog.com/oosky/archive/2005/10/11/643.html</link><dc:creator>任我行</dc:creator><author>任我行</author><pubDate>Tue, 11 Oct 2005 08:34:00 GMT</pubDate><guid>http://www.cppblog.com/oosky/archive/2005/10/11/643.html</guid><wfw:comment>http://www.cppblog.com/oosky/comments/643.html</wfw:comment><comments>http://www.cppblog.com/oosky/archive/2005/10/11/643.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/oosky/comments/commentRss/643.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/oosky/services/trackbacks/643.html</trackback:ping><description><![CDATA[
		<font color="#000080" size="5">
				<strong>Lesson 5 Python中的输入与判断<br /></strong>
		</font>
		<br />健全的程序大凡都需要输入的功能，所以要学习一下简单的输入：<br />输入要使用的是raw_input或者input函数，区别是raw_input直接把你的输入作为字符串返回，而input则在raw_input的基础上把字符串转换为数字返回（如果你输入$@#$$怎么办？自己试试看）。我们就利用这两个输入函数来作一些有趣的事情。<br /><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><br />代码： 
<tr><td id="code0" style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">your_name = raw_input("please input your name:")<br />hint = "welcome! %s" % your_name<br />print hint</td></tr></tbody></table>不简单吧，还有%呢。%s表示在这个位置插入一个字符串，%表示把后面提供的参数“推”入前面的字符串中，所以推的结果是把%s推出去了，把your_name给填入那个地方了。printf知道吧，C中的printf就是一样的嘛。<br /><br /><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr>代码： 
<td id="code1" style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">inputed_num = 0<br />while 1:<br />    inputed_num = input("input a number between 1 and 10\n")<br />    if inputed_num &gt;= 10:<br />        pass<br />    elif inputed_num &lt; 1:<br />        pass<br />    else:<br />        break<br />print "hehe, don't follow, won't out"</td></tr></tbody></table><br />pass就是pass了，过了嘛，什么都不干了。break就是跳出这个while 1（无穷循环，1总是真的，while总是执行）。\n是换行，不会全部忘光了吧。<br /><br /><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><br /><font color="#000080"><font size="5"><strong>Lesson 6 Python余兴节目</strong></font><br /></font><br /><td id="code0" style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">from Tkinter import *<br />root = Tk()<br />w = Label(root, text="Hello, world!")<br />w.pack()<br />root.mainloop()</td></tr></tbody></table><br />呵呵，一次太超前了一点，不过也不是解释不清楚。我干脆也不解释了吧。给大家增进一点兴趣。<br /><br />－－－－－－－－－<br />还是解释一下<br />fromt Tkinter import *<br />是引入一个模块，这个模块用来创建GUI（Graphic User Interface）窗口<br />Tk()创建了一个主窗口<br />Label()创建一个标签<br />Label的第一个参数是root表明Label是在这个主窗口中的。<br />w.pack()是指用缺省的方式把Label放置在主窗口中<br />root.mainloop()开始了一个循环，是等待你的输入的循环。<br /><br /><br /><font size="5"><font color="#7fffd4"><strong><font color="#000080">Lesson 7 Python基本语法要素齐动员</font><br /></strong></font></font><br />现在的目的是尽量想出一个用的东西仅限于内置的变量类型和语句的一个综合的例子，我想还是那个联系人表的例子吧<br /><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><br /><td id="code0" style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">################<br />#呵呵，还忘记了讲注释<br />#第一个算是完整的程序<br />################<br />contact = {}<br />contact_list = []<br />while 1:<br />    contact['name'] = raw_input("please input name: ")<br />    contact['phone'] = raw_input("please input phone number: ")<br />    contact_list.append(contact.copy())<br />    go_on = raw_input("continue?\n")<br />    if go_on == "yes":<br />        pass<br />    elif go_on == "no":<br />        break<br />    else:<br />        print "you didn't say no\n"<br />i = 1<br />for contact in contact_list:<br />    print "%d: name=%s" % (i, contact['name'])<br />    print "%d: phone=%s" % (i, contact['phone'])<br />    i = i + 1</td></tr></tbody></table><br />首先是回忆一下字符串<br />字符串既能够用""也能够用''。然后是很有特色的%操作，起到格式化字符串的作用，前面仅仅在字符串中有一个%s，现在有%d和%s两个，分别代表插入十进制数值和字符串于%x标记的位置处。<br /><br />然后是列表<br />列表是顺序的序列，用append在后面附加，也能构用索引值索引。所以我们完全可以用一个变量保存len(contact_list)得到的长度，然后一个个的遍历，不过这里展示了另外一种非常方便的方法。而且值得注意的是append()中的参数，我使用了contact.copy()，你可以尝试着把copy()给去掉，观察结果你就知道了所谓的append是怎么干的了，特别是你对指针之类的东西很有感觉的话（但是在Python中是没有指针这个概念的）<br /><br />再来看看字典<br />字典是键（key）和值（value）的对应组合成的无序的序列。所以你存的时候要指明键（name或者phone），而且取的时候也是一样的。<br /><br />接下来是判断<br />if是很好用的，==表示判断两个是否相等，=表示把右边的赋给左边的。而且可以直接判断字符串是否相等，这个太方便了，如果你曾经用过strcpy()的话，就知道了。elif是表示else if的意思，如果if不满足就判断elif的条件是否满足，最后是到else中去。<br /><br />循环是个主体<br />while和for都是循环。不过这里while就没什么说的了，又是很经典的while 1，死循环，然后必须在里面用break来跳出。for和C中的for是不一样的，for in才是一个完整的语句，指的是从一个能够逐一取值的序列中（比如list），一个一个的取出值赋给for后面指定的变量中，直到取空，循环结束。其实回想一般用C中的for的经历，也大体如此。而且你还可以用for i in range(1,100)来指定一个范围从多少到多少。可以说for in充分体现了python的体贴周到，用起来很直观，不会绕弯。<br /><br />接下来就是运行了，大家慢慢调试吧。下次可能是讲异常处理，因为我觉得在深入到使用各种高级的要素之前，先要学会怎么去处理异常。最常见的异常应该是input()，然后你给出的输入是一个无法转换为数字的字符串了，那么我们就要来处理它。<br /><br /><strong><font color="#7fffd4" size="5"><font color="#000080">Lesson 8 Python中的错误检测</font><br /></font></strong><br />写程序什么最重要？完成功能最重要。但是程序中难免要有用户的输入，对于这些写的时候未可预知的因素中间可能出现的错误，一般称作异常。对于异常情况的处理，不同语言有不同的做法，比如检查函数的返回值之类的，但是那种办法会把代码弄成一团浆糊。Python在这个方面是比较先进的，我们从一个例子来看看：<br /><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><br />代码： 
<td id="code0" style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">print input()</td></tr></tbody></table><br />呵呵，看不同吧。其实input是输入，print是输出。也就是把输入的东西立即输出。但是这个和 
<table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr>代码： 
<td id="code1" style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">print raw_input()</td></tr></tbody></table><br />有什么不同呢？<br />不同的地方是，input()会在raw_input()接收了“<font color="red">字符串</font>”的输入之后进行一些处理，比如你是输入1+2，然后输出的就是3了，而raw_input就是原原本本的1+2的输出了。用代码表示就是<br /><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><br />代码： 
<td id="code2" style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">eval(raw_input())</td></tr></tbody></table><br />eval是求表达式的值，任何一个简单的python表达式，就像1+2这样的作为字符串送入，就能把值从eval处理之后取出来。<br />现在你实验一下"sdfsdf”之后，你会发现提示你<br /><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><br />提示： 
<td width="100%" bgcolor="#ffffff">Traceback (most recent call last):<br />  File "<pyshell#4>", line 1, in -toplevel-<br />    input()<br />  File "<string>", line 0, in -toplevel-<br />NameError: name 'sdfsdf' is not defined</string></pyshell#4></td></tr></tbody></table><br />如果输入其他稀奇古怪的字符串还可能有其他的出错提示，我们现在要做的就是捕捉这种由用户输入引起的错误。这么来作：<br /><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><br /><td id="code3" style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">try:<br />    print input()<br />except:<br />    print 'there is an error in your input'</td></tr></tbody></table><br />这下你无论怎么输入都不会有什么其他的提示了，就是自己设定的print语句作为提示。现在把try except的组合去掉，回到print input()你再尝试一下：<br />1/0<br />这个显然是一个错误，被零除的错误。那么专门来捕捉一下这个错误：<br /><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><td id="code4" style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">try:<br />    print input()<br />except ZeroDivisionError:<br />    print 'can not be divided by zero'</td></tr></tbody></table><br />这下你能够捕捉到被零除的错误了。然后你再尝试其他的输入，可能错误就没有被捕捉了。所以再补上：<br /><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><td id="code5" style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">try:<br />    print input()<br />except ZeroDivisionError:<br />    print 'can not be divided by zero'<br />except:<br />    print 'there is an error in your input'</td></tr></tbody></table><br />注意，捕捉所有错误的except必须放在所有的except的最后一位。明白了？OK<br /><br />还有更多的能够捕捉的错误，自己查手册吧（暂时看不了手册没关系，慢慢来嘛）。以后还能够自己raise（引发）异常呢。不过那都是比较高级的应用了，对于出错处理从一开始就有这个印象，并牢记在心中对于以后写大一些的软件很有好处。<br /><br /><font color="#000080" size="5"><strong>Lesson 9 走向模块化的第一步<br /></strong></font><br />大规模的程序设计需要你把一个大的程序拆分成n个模块。然后把模块进行组合，交互成为一个完整的程序。你不可能像现在这样，从顶写到尾。。。<br />那么我们从<font color="red">函数</font>开始。<br /><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><td id="code0" style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">def square(x):<br />    return x**2<br /><br />print square(5)</td></tr></tbody></table><br />简单吧，这个是我看过的函数定义中最简洁的。def表示这个开始定义一个函数，x是参数，参数是不需要类型的，因为python是不需要明确指出类型的。return是返回值，返回的值插入到调用函数的地方。再复杂一些<br /><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><td id="code1" style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">def multiply(a, b):<br />    return a*b<br /><br />print multiply(1,2)</td></tr></tbody></table><br />这是两个参数的函数。那么返回两个值呢？<br /><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><td id="code2" style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">def swap(a, b):<br />    return (b,a)<br />print swap(1,2)</td></tr></tbody></table><br />呵呵，其实这里返回的并不是两个值，而是一个值。怎么说呢。(b, a)就是一个东西，是一个元组（turple），你可以用这样的方式成生一个元组，并使用它。元组是基本的变量类型：<br /><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><td id="code3" style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">my_turple = (1, 2, 3)<br />my_list = []<br />for i in my_turple:<br />    my_list.append(i)<br />print my_list</td></tr></tbody></table><br />其实元组和列表非常像，但是列表的长度是可以变化的，而且成员是可以改变的。但是元组是什么都不能变的，是只读的。<br /><br />对于高级一点的话题：传递进来的参数是否可以被修改，这个问题取决于你传递了什么近来。如果是数字或者字符串，是不能够改变的，但是如果是这样的：<br /><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><br /><td id="code4" style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">def test_func(list_be_passed):<br />    list_be_passed[0] = 'towin'<br />my_list = ['taowen']<br />print my_list<br />test_func(my_list)<br />print my_list</td></tr></tbody></table><br />就能够改变传递近来的参数了，所以处理的时候要小心，必要的时候copy一下再传递。<br /><br />函数简单吧，但是很好用的。想起C中的函数那么那么多麻烦，真是感慨万千啊。下面是应该讲GUI编程呢，还是面向对象呢？思考一下<br /><br /><font color="#7fffd4"><font size="5"><strong><font color="#000080">Lesson 10 Python的文件操作</font><br /></strong></font></font><br />文件操作....是一个语言和外界联系的主要方法....现在以txt为例简单的讲一下...<br /><br />首先是建立关联...假设在存在以下文件 c:\a.txt<br /><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><td id="code0" style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">This is line #1<br />This is line #2<br />This is line #3<br />END</td></tr></tbody></table><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><br /><tr><br /><td id="code1" style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">&gt;&gt;&gt; xxx = file('c:\\a.txt', 'r')</td></tr></tbody></table><br />关键字的第一部分，是文件路径及名称。注意这里面，路径需要用<font color="red">\\</font><br />第二部分，是对文件的模式或者叫权限，一般有以下3种 "r" (read)， "w" (write)和 "a"(append).<br /><br />之后，就可以利用<br />xxx_content = infile.read()<br />xxx_content = infile.readlines()<br />来读取文件内容了 
<table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><td id="code2" style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">&gt;&gt;&gt; xxx = file('c:\\a.txt', 'r')<br />&gt;&gt;&gt; xxx_content = xxx.read()<br />&gt;&gt;&gt; print xxx_content<br />This is line #1<br />This is line #2<br />This is line #3<br />END<br />&gt;&gt;&gt; xxx.close()<br />&gt;&gt;&gt;<br /><br />&gt;&gt;&gt; infile = file('c:\\a.txt', 'r')<br />&gt;&gt;&gt; xxx = file('c:\\a.txt', 'r')<br />&gt;&gt;&gt; for xxx_line in xxx.readlines():<br />        print 'Line:', xxx_line<br />        <br />Line: This is line #1<br /><br />Line: This is line #2<br /><br />Line: This is line #3<br /><br />Line: END<br />&gt;&gt;&gt; xxx.close()<br />&gt;&gt;&gt; </td></tr></tbody></table><br />然后是文件的写入<br /><table cellspacing="1" cellpadding="10" width="100%" bgcolor="#698cc3" border="0"><tbody><tr><td id="code3" style="WORD-BREAK: break-all" width="100%" bgcolor="#ffffff">&gt;&gt;&gt; xxx=file('c:\\test.txt','w')<br />&gt;&gt;&gt; xxx.write('billrice')<br />&gt;&gt;&gt; xxx.write('testtest')<br />&gt;&gt;&gt; xxx.write('enter\n')<br />&gt;&gt;&gt; xxx.writelines(['billrice','ricerice'])<br />&gt;&gt;&gt; xxx.close()<br />&gt;&gt;&gt;<br />&gt;&gt;&gt; xxx=file('c:\\test.txt','r')<br />&gt;&gt;&gt; content=xxx.read()<br />&gt;&gt;&gt; print content<br />billricetesttestenter<br />billricericerice<br />&gt;&gt;&gt; </td></tr></tbody></table><br />需要注意的是...在<font color="red">xxx.close()</font>之前，c盘下面只有一个空空的test.txt，xxx.close()的作用相当于最后的存盘。<br /><img src ="http://www.cppblog.com/oosky/aggbug/643.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/oosky/" target="_blank">任我行</a> 2005-10-11 16:34 <a href="http://www.cppblog.com/oosky/archive/2005/10/11/643.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Python完全新手教程(lesson 1-lesson 4)</title><link>http://www.cppblog.com/oosky/archive/2005/10/11/639.html</link><dc:creator>任我行</dc:creator><author>任我行</author><pubDate>Tue, 11 Oct 2005 08:21:00 GMT</pubDate><guid>http://www.cppblog.com/oosky/archive/2005/10/11/639.html</guid><wfw:comment>http://www.cppblog.com/oosky/comments/639.html</wfw:comment><comments>http://www.cppblog.com/oosky/archive/2005/10/11/639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/oosky/comments/commentRss/639.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/oosky/services/trackbacks/639.html</trackback:ping><description><![CDATA[<P><FONT style="BACKGROUND-COLOR: #ff1493" size=5><STRONG><FONT color=#7fffd4><FONT style="BACKGROUND-COLOR: #d3d3d3">&nbsp;Lesson 1 准备好学习Python的环境</FONT><BR></FONT></STRONG></FONT><BR>Python 的官方网址：<BR><A href="http://www.python.org/">www.python.org</A><BR>点击下面连接就可以直接下载了，这里只提供了Windows下的Python。<BR><A href="http://www.python.org/ftp/python/2.4.2/python-2.4.2.msi">http://www.python.org/ftp/python/2.4.2/python-2.4.2.msi</A><A href="http://10.1.204.2/tool/compiler&amp;IDE/Python-2.3.2-1.exe"></A><BR>linux版本的我就不说了，因为如果你能够使用linux并安装好说明你可以一切自己搞定的。<BR>Python入门教程顺便也贴上来：<A href="http://lj0508.blogchina.com/inc/Python.rar">http://lj0508.blogchina.com/inc/Python.rar</A><BR></P>
<P>运行环境可以是linux或者是windows：<BR>1、linux<BR>redhat的linux安装上去之后一定会有python的（必须的组件），在命令行中输入python回车。这样就可以进入一个<BR>&gt;&gt;&gt;的提示符<BR>2、windows<BR>安装好了python之后，在开始菜单里面找到Python2.3-&gt;IDLE，运行也会进入一个有<BR>&gt;&gt;&gt;提示符的窗口</P>
<P>开始尝试Python<BR>1、输入：<BR>welcome = "Hello!"<BR>回车<BR>然后又回到了&gt;&gt;&gt;<BR>2、输入：<BR>print welcome<BR>回车<BR>然后就可以看到你自己输入的问候了。</P>
<P><FONT color=#7fffd4 size=5><STRONG>Lesson 2 搞定环境之后的前行</STRONG></FONT><BR><BR>Python有一个交互式的命令行，大家已经看到了吧。所以可以比较方便的学习和尝试，不用“新建－存档－编译－调试”，非常适合快速的尝试。</P>
<P>一开始从变量开始（其实说变量，更准确的是对象，Python中什么都可以理解为对象）。</P>
<P>变量<BR>welcome = "hello!"<BR>welcome就是变量名，字符串就是变量的类型，hello!就是变量的内容，""表示这个变量是字符串，""中间的是字符串的内容。<BR>熟悉其他语言的人，特别是编译类型的语言，觉得没有变量的声明很奇怪。在python中用赋值来表示我要这么一个变量，即使你不知道要放什么内容，只是要先弄一个地方来放你的东西，也要这么写：<BR>store = ""<BR>不过这个还是说明了store是字符串，因为""的缘故。</P>
<P>have a try</P>
<P>&nbsp;&nbsp; 代码: </P>
<P>
<TABLE cellSpacing=1 cellPadding=10 width="100%" bgColor=#698cc3 border=0>
<TBODY>
<TR>
<TD id=code0 style="WORD-BREAK: break-all" width="100%" bgColor=#ffffff>tmp_storage = ""<BR>welcome = "hello!"<BR>tmp_storage = welcome<BR>print tmp_storage</TD></TR></TBODY></TABLE>&nbsp;<BR>你会发现同样的问候出现了。</P>
<P>字符串<BR>字符串是用""标记的，但是用''也可以（不要说你看不出一个是双引号，一个是单引号），两者之间是有一丁点区别，不过你可以不用理会。其实是差不多的。字符串有很多自己的操作，最常用的是这样的：</P>
<P>&nbsp;&nbsp; 代码:&nbsp;<BR>&nbsp; 
<TABLE cellSpacing=1 cellPadding=10 width="100%" bgColor=#698cc3 border=0>
<TBODY>
<TR>
<TD id=code1 style="WORD-BREAK: break-all" width="100%" bgColor=#ffffff>welcome = "hello"<BR>you = "world!"<BR>print welcome+you</TD></TR></TBODY></TABLE>&nbsp;</P>
<P>运行之后就会发现她输出了helloworld!。</P>
<P>更多变量<BR>变量还有几种类型。<BR>数<BR>字符串<BR>列表<BR>字典<BR>文件<BR>勿庸置疑，这些都是非常非常常用的。对于数字就不用讲了那就是：</P>
<P><BR>&nbsp;&nbsp; 代码:&nbsp;<BR>
<TABLE cellSpacing=1 cellPadding=10 width="100%" bgColor=#698cc3 border=0>
<TBODY>
<TR>
<TD id=code2 style="WORD-BREAK: break-all" width="100%" bgColor=#ffffff>radius = 10<BR>pi = 3.14<BR>area = pi*radius**2<BR>print "the area is", area</TD></TR></TBODY></TABLE></P>
<P>下次讲列表和字典</P>
<P><STRONG><FONT color=#7fffd4 size=5>Lesson 3 Python中的数学结构<BR></FONT></STRONG><BR>数学中你学什么东西最多遍？我想根据我的一点浅薄经验（虽然我是数学系的），学得最多的是集合，无论什么数学书都从集合开始讲起。然后讲函数呢，又必然把映射再讲一遍。可以说，集合和映射是数学中最基本的结构了。</P>
<P>Python对于数据结构非常明智的内置了两个，回想我写C的程序，往往是一开始就是用struct拼一个链表出来（重复劳动）。Python中提供了列表（list）和字典（dict）两种数据结构。他们分别对应的原型是集合和映射。这个你应该明白了，只是表示方法有一点不一样而已。</P>
<P>列表<BR>列表的英文名是list嘛，所以我取一个名字叫</P>
<P><BR>&nbsp;&nbsp; 代码:&nbsp;<BR>&nbsp; </P>
<P>
<TABLE cellSpacing=1 cellPadding=10 width="100%" bgColor=#698cc3 border=0>
<TBODY>
<TR>
<TD id=code0 style="WORD-BREAK: break-all" width="100%" bgColor=#ffffff>my_list = []<BR>这个就产生了一个空的列表。然后给它赋值<BR>my_list = [1,2]<BR>print my_list<BR>my_list.append(3)<BR>print my_list</TD></TR></TBODY></TABLE><BR>&nbsp;非常容易明白的。append前面加了一个点，这个表示append是my_list方法。我实在不想又去给你解释什么是对象，什么是成员方法，然后扯出一大段出来。<BR>list是可以索引的：<BR>print my_list[1]<BR>不过你或许会不明白为什么是2，而不是显示的是1。因为索引从0开始，要输出第一个元素：<BR>print my_list[0]</P>
<P>字典</P>
<P>&nbsp;&nbsp; 代码: </P>
<P>
<TABLE cellSpacing=1 cellPadding=10 width="100%" bgColor=#698cc3 border=0>
<TBODY>
<TR>
<TD id=code1 style="WORD-BREAK: break-all" width="100%" bgColor=#ffffff>contact = {}</TD></TR></TBODY></TABLE></P>
<P>这个产生了一个空字典，contact。然后往里面填充内容：</P>
<P>&nbsp;&nbsp; 代码: </P>
<P>
<TABLE cellSpacing=1 cellPadding=10 width="100%" bgColor=#698cc3 border=0>
<TBODY>
<TR>
<TD id=code2 style="WORD-BREAK: break-all" width="100%" bgColor=#ffffff>contact={}<BR>contact["name"]="taowen"<BR>contact["phone"]=68942443</TD></TR></TBODY></TABLE></P>
<P>name就是你查字典的时候要查找的单词，taowen就是查到的内容。不过你现在不是查，而是在写这个字典。同理添加了phone这个词条。<BR>现在添加好了，看看contact的内容，怎么查看？自己想办法吧。。。<BR>如果你悟性够，就会发现python很多操作是通用的，既然能够print 1, print "", print my_list，那么其他数据类型的变量就没有理由不能用了。</P>
<P>结合列表和字典</P>
<P><BR>&nbsp;&nbsp; 代码: <BR>
<TABLE cellSpacing=1 cellPadding=10 width="100%" bgColor=#698cc3 border=0>
<TBODY>
<TR>
<TD id=code3 style="WORD-BREAK: break-all" width="100%" bgColor=#ffffff>contact_list=[]<BR>contact1={}<BR>contact1['name']='taowen'<BR>contact1['phone']=68942443<BR>contact_list.append(contact1)<BR>contact2={}<BR>contact2['name']='god'<BR>contact2['phone']=44448888<BR>contact_list.append(contact2)</TD></TR></TBODY></TABLE></P>
<P>呵呵，够复杂的吧。你可以想出我为什么要用两个contact字典呢？。。。</P>
<P><FONT color=#7fffd4 size=5><STRONG>Lesson 4 用不同的方式来操作Python<BR></STRONG></FONT><BR>到现在为止，我们用的都是交互式的命令行来操作的，的却是很方便，是吧？不过，复杂一些的情况就不那么好使了，来换一种方式来操作Python</P>
<P>在IDLE中点击File-&gt;New Window，出现一个新窗口（对于linux下，你要用vim或者emacs或者pico把文本的源文件写好了）。为了方便，先点击File-&gt;Save，填入my_try.py。这样能够让编辑器知道在编辑python的源文件，会把你输入的代码进行一点上色的处理。</P>
<P>填入下面的代码：</P>
<P>&nbsp;&nbsp; 代码: <BR>
<TABLE cellSpacing=1 cellPadding=10 width="100%" bgColor=#698cc3 border=0>
<TBODY>
<TR>
<TD id=code0 style="WORD-BREAK: break-all" width="100%" bgColor=#ffffff>i = 5<BR>n = 0<BR>while i&gt;0:<BR>&nbsp; &nbsp; n = n + i<BR>&nbsp; &nbsp; i = i - 1<BR>print n</TD></TR></TBODY></TABLE></P>
<P>你会发现输入:之后，自动会给缩进。而且也没有在python中发现和C/C++中类似的{}标记也没有pascal中的begin end;，其实缩进就是python中表示一段代码的从属关系的标记方法。表示n=n+1和i=i-1这两句都是while的。程序的运行逻辑应该不用解释了吧。就是运行5+4+3+2+1的结果。</P>
<P>运行代码<BR>按F5，可能提示你没有存盘，照着办就是了。<BR>发挥你的能力，计算从1到10的所有偶数的和（提示，可能没有你想象的那么智能）。<BR></P><img src ="http://www.cppblog.com/oosky/aggbug/639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/oosky/" target="_blank">任我行</a> 2005-10-11 16:21 <a href="http://www.cppblog.com/oosky/archive/2005/10/11/639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Python初探 </title><link>http://www.cppblog.com/oosky/archive/2005/10/11/637.html</link><dc:creator>任我行</dc:creator><author>任我行</author><pubDate>Tue, 11 Oct 2005 07:31:00 GMT</pubDate><guid>http://www.cppblog.com/oosky/archive/2005/10/11/637.html</guid><wfw:comment>http://www.cppblog.com/oosky/comments/637.html</wfw:comment><comments>http://www.cppblog.com/oosky/archive/2005/10/11/637.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/oosky/comments/commentRss/637.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/oosky/services/trackbacks/637.html</trackback:ping><description><![CDATA[<DIV>
<P>什么是Python? <BR>&nbsp;&nbsp;&nbsp; Python是一种即译式的，互动的，面向对象的编程语言，它包含了模组式的操作，异常处理，动态资料形态，十分高层次的动态资料结构，以及类别的使用。Python揉合了简单的语法和强大的功能。它的语法表达优美易读。它具有很多优秀的脚本语言的特点：解释的，面向对象的，内建的高级数据结构，支持模块和包，支持多种平台，可扩展。而且它还支持交互式方式运行，图形方式运行。它拥有众多的编程界面支持各种操作系统平台以及众多的各类函数库。利用C和C++可以对它进行扩充。个别的应用软件如果需要有一个可程序化界面也可以利用它来做为扩展语言用。最后，Python的可移植度非常高:它可以在许多的Unix类平台上运行，在Mac,MS-DOS,视窗Windows，Windows NT，OS/2，BeOS，以至RISCOS上都有相关的Python版本。</P>
<P>简单的说它具有以下一些特征：</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是一种解释性的，面向对象的，具有动态语义的程序设计语言。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 适合快速开发。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 能集成到其他流行的服务器，也自带服务器。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;提供清晰的数据/逻辑/表示的分离。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;带有可扩展的内置对象和强大的集成安全模块。</P>
<P>Python的历史</P>
<P>Python的创始人为Guido van Rossum。1989年圣诞节期间，在阿姆斯特丹，Guido为了打发圣诞节的无趣，决心开发一个新的脚本解释程序，做为ABC语言的一种继承。之所以选中Python（大蟒蛇的意思）作为程序的名字，是因为他是一个Monty 大蟒蛇飞行马戏团的爱好者。</P>
<P>ABC是由Guido参加设计的一种教学语言（没听说过）。就Guido本人看来，ABC这种语言非常优美和强大，是专门为非专业程序员设计的。但是ABC语言并没有成功，究其原因，Guido认为是非开放造成的。Guido决心在Python中避免这一错误（的确如此，Python与其它的语言如C,C++和Java结合的非常好）。同时，他还想实现在ABC中闪现过但未曾实现的东西。</P>
<P>就这样，Python在Guido手中诞生了（真要感谢他）。实际上，第一个实现是在Mac机上。可以说，Python是从ABC发展起来，主要受到了Modula-3（另一种相当优美且强大的语言，为小型团体所设计的）的影响。并且结合了Unix Shell和C的习惯。</P>
<P>Python可用在哪些地方?</P>
<P>&nbsp;&nbsp;&nbsp; Python可以用在许多场合。当你需要大量的动态调整，要容易使用，功能强大并且富有弹性的情况，Python可以发挥很好的功效。</P>
<P>&nbsp;&nbsp; 在处理文字方面，Python的核心功能（不需要任何扩充库的情况下）比别的编程语言更为易用而且速度相当。这使Python在需要处理字符串的工作（包括系统管理，CGI编程）上成为高效的语言。</P>
<P>&nbsp;&nbsp; 当Python加上它的标准扩充库（如PIL,COM,Numeric,Oracledb,kjbuckets,tkinter,win32api,等等）或是特别扩充库（你自己写的，或是用SWING做的，或是利用ILU/COBRA/com的）后，它可以变成一个很好的“胶合语言”或者叫“指导语言”。就是指把不同的编程环境和互不相关的软件功能整合的工具。例如把Numeric和Oracledb透过Python结合起来你就可以替你的资料库数据做系统分析。Python的简单、易用以及方便而强大的c/c++扩展方面使它成为一种十分优秀的“胶合语言”。</P>
<P>许多开发人员也在写图形用户界面时广泛的采用了Python。如果在Windows下，如果想做一个图形界面程序，那么Python可以胜任。可以去wxPython.org看一下，它是一个Python的扩展库，可以用来实现跨平台的图形编程，它支持windows和unix/linux。在那个网站上有一些演示，可以学习一下。Python可以做CGI。有些主页提供了对Python的CGI支持。现在还有一些用Python做的游戏。如果想了解更多的Python可以做什么，可以去SourceForge上查找有关Python的项目，上面有很多东西。</P>
<P>运行方式</P>
<P>Python可以以命令行方式运行，也可以交互式方式运行，还具有图形集成环境，这样开发Python就相当方便。现在已经出现了许多用Python编写的可视化编程软件，用于实现象Delphi一样的功能。</P>
<P>面向对象</P>
<P>Python是一个真正的面向对象语言。它甚至支持异常的处理。如果学过Java，应该对这个不陌生。但其它的脚本语言，如PHP，好象就没有。这使得程序的编写更加清晰，而不需要许多的错误检查了。</P>
<P>模块和包</P>
<P>这一点更象是Java。对于Java的支持，大家可以了解JPython。JPython是用Java写的Python，它完全支持Java，在这个环境下使用Python可以随意地使用Java的类库。语言扩展可以用C、C++或Java为Python编写新的新言模块，如函数。或者与Python直接编译在一起，或者采用动态库装入方式实现。也专门有人编写了一个工具，可以实现为Python自动实现函数接口封装，这就是SWIG（Simplified Wrapper and Interface Generator)，或称做简单封装和接口生成器(可以在<A href="http://sourceforge.net/projects/swig/"><FONT color=#003366>http://sourceforge.net/projects/swig/</FONT></A>)。</P>
<P>有趣的语法</P>
<P>Guido认为Python的语法是非常优美的。其中一点就是，块语句的表示不是C语言常用的{}对，或其它符号对，而是采用缩近表示法！有趣吧。就这一点来说，Guido的解释是：首先，使用缩近表示法减少了视觉上的混乱，并且使程序变短，这样就减少了需要对基本代码单元注意的范围；其次，它减少了程序员的自由度，更有利于统一风格，使得阅读别人的程序更容易。感觉还是不错的，就C语言来说，在if语句后面大括号的写法就好几种，不同的人喜欢不同的样子，还不如统一起来，都不会看得别扭。</P>
<P>在每个类或函数的定义后面，第一行可以是说明语句，根本不需要注释符标记。对于后面跟块语句的语句，后面应跟上一个冒号。一行语句不能太长，因为没有行结束符，如果超长则要使用续行符(\)。还有一些有趣的比如说，象下面的一个比较处理，用C语言为：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </P>
<P>if (2&lt;a&amp;&amp;a&lt;5)</P>
<P>用Python可以表示为</P>
<P>if (2&lt;a&lt;5) :</P>
<P>什么是Zope?</P>
<P>Zope是一个开放源代码的Web应用服务器，采用Python语言开发，使用它您可以方便的构建内容管理、内部网、门户网站、和其他的定制应用。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 高度面向对象的Web开发平台,采用Python语言开发。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以运行在几乎所有流行的操作系统上,支持多语言。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 能集成到其他流行的服务器，也自带服务器。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提供清晰的数据/逻辑/表示的分离 。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 带有可扩展的内置对象和强大的集成安全模块。</P>
<P>什么是Plone?</P>
<P>Pone是一个Zope上的一个用户友好、功能强大的开放源代码内容管理系统。Plone适合用作内部网/外部网的服务器、文档发布系统、门户服务器和异地协同群件工具，到目前，Plone其实已经发展成为了一个应用开发平台。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是一种功能强大的开放源码(Open Source)内容管理系统(CMS) 。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过Web浏览器来访问、编辑内容和管理,易于更新内容 。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;无需编程，即可创建新的内容类型 。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 协同的编辑和发布机制 。</P>
<P>Python的IDE开发环境:</P>
<P>Wingide:http:// <A href="http://www.wingide.com/"><FONT color=#003366>www.wingide.com</FONT></A><BR></P>
<P>ipython: <A href="http://ipython.scipy.org/"><FONT color=#003366>http://ipython.scipy.org/</FONT></A><BR></P>
<P>参考资料：</P>
<P>Python中文社区：<A href="http://python.cn/"><FONT color=#003366>http://python.cn</FONT></A>&nbsp;<BR>Zope/Plone中文社区：<A href="http://zope.cn/"><FONT color=#003366>http://zope.cn</FONT></A>&nbsp;<BR>Zope官方网站：<A href="http://www.zope.org/"><FONT color=#003366>http://www.zope.org</FONT></A>&nbsp;<BR>中文Zope用户组：<A href="http://www.czug.org/"><FONT color=#003366>http://www.czug.org/</FONT></A>&nbsp;<BR>Python类库: <A href="http://www.pypackage.org/"><FONT color=#003366>http://www.pypackage.org/</FONT></A>&nbsp;<BR>Python中文论坛：<A href="http://www.linuxforum.net/"><FONT color=#003366>http://www.linuxforum.net/</FONT></A> <BR>O'Reilly： <A href="http://www.oreillynet.com/"><FONT color=#003366>http://www.oreillynet.com</FONT></A><BR>wxPython.org： <A href="http://www.wxpython.org/"><FONT color=#003366>http://www.wxPython.org</FONT></A>&nbsp;<BR>Jpython.org: <A href="http://jython.org/"><FONT color=#003366>http://jython.org</FONT></A></P></DIV><img src ="http://www.cppblog.com/oosky/aggbug/637.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/oosky/" target="_blank">任我行</a> 2005-10-11 15:31 <a href="http://www.cppblog.com/oosky/archive/2005/10/11/637.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Python语言</title><link>http://www.cppblog.com/oosky/archive/2005/10/11/629.html</link><dc:creator>任我行</dc:creator><author>任我行</author><pubDate>Tue, 11 Oct 2005 03:57:00 GMT</pubDate><guid>http://www.cppblog.com/oosky/archive/2005/10/11/629.html</guid><wfw:comment>http://www.cppblog.com/oosky/comments/629.html</wfw:comment><comments>http://www.cppblog.com/oosky/archive/2005/10/11/629.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/oosky/comments/commentRss/629.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/oosky/services/trackbacks/629.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Python是一种不但成熟而且功能也十分强大的面向对象程序设计语言。它的功能性现在已经可以与Java相媲美了。尽管Python有着这样或者那样的优点，但是它仍然面对着这样的一种现实：真正了解Python的人给予了它很高的评价，但是实际上真正了解它的人并不多。在本篇文章里，我将会向您介绍一系列的Python编程资源，这样您就可以对这种编程语言有更多的了解，并且能够逐步的开始使用这个优秀的编程语言了。&nbsp;&nbsp;<a href='http://www.cppblog.com/oosky/archive/2005/10/11/629.html'>阅读全文</a><img src ="http://www.cppblog.com/oosky/aggbug/629.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/oosky/" target="_blank">任我行</a> 2005-10-11 11:57 <a href="http://www.cppblog.com/oosky/archive/2005/10/11/629.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>无所不能的python!!! [转] </title><link>http://www.cppblog.com/oosky/archive/2005/10/11/623.html</link><dc:creator>任我行</dc:creator><author>任我行</author><pubDate>Tue, 11 Oct 2005 03:01:00 GMT</pubDate><guid>http://www.cppblog.com/oosky/archive/2005/10/11/623.html</guid><wfw:comment>http://www.cppblog.com/oosky/comments/623.html</wfw:comment><comments>http://www.cppblog.com/oosky/archive/2005/10/11/623.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/oosky/comments/commentRss/623.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/oosky/services/trackbacks/623.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 面对珍珠（Perl）夺目之光、灵蛇（Python）更具有上天入地之能。它可以在 MS-DOS，Amiga，BeOS， OS/2，VMS，QNX等多种OS上运行；比 Perl 和 VB更快更好，比 C 和 C++ 语言更具扩充性；不仅在“星球大战”、 “星球之旅（Star Trek）”等超级大片中当纲特技和动画制作，还闯入了美国航天航空局控制室。真相如何......&nbsp;&nbsp;<a href='http://www.cppblog.com/oosky/archive/2005/10/11/623.html'>阅读全文</a><img src ="http://www.cppblog.com/oosky/aggbug/623.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/oosky/" target="_blank">任我行</a> 2005-10-11 11:01 <a href="http://www.cppblog.com/oosky/archive/2005/10/11/623.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我眼中的的Python [转] </title><link>http://www.cppblog.com/oosky/archive/2005/10/11/622.html</link><dc:creator>任我行</dc:creator><author>任我行</author><pubDate>Tue, 11 Oct 2005 02:58:00 GMT</pubDate><guid>http://www.cppblog.com/oosky/archive/2005/10/11/622.html</guid><wfw:comment>http://www.cppblog.com/oosky/comments/622.html</wfw:comment><comments>http://www.cppblog.com/oosky/archive/2005/10/11/622.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/oosky/comments/commentRss/622.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/oosky/services/trackbacks/622.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我眼中的Python python这种编程语言我很早就听说它了，早在1998年，我在玩Linux的时候，就接触过它，但是我对python的印象仅仅停留在它是一种流行的面向对象的脚本语言的认识上。 zope，基于python的app server，早在2000年我就已经对它如雷贯耳了，但是我对zope的印象仅仅停留在它是一种类似Apache HTTPD Server，AOL Server之类的web server上。 今年ozzzzzz多次向我提到python和zope，听得我耳朵都起了老茧了，dlee又建议我开设python版面，虽然我没有答应，但是架不住朋友们的左劝右劝，终究对python这门语言有了好奇心。 几天前，当我漫不经心的浏览了python和zope的网站之后，我突然有了一种“众里寻它千百度，那人却在灯火阑珊处”的感觉，悔不迭错过了那么多次相逢的机会。&nbsp;&nbsp;<a href='http://www.cppblog.com/oosky/archive/2005/10/11/622.html'>阅读全文</a><img src ="http://www.cppblog.com/oosky/aggbug/622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/oosky/" target="_blank">任我行</a> 2005-10-11 10:58 <a href="http://www.cppblog.com/oosky/archive/2005/10/11/622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>