<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>我想网 &#187; Python</title>
	<atom:link href="http://www.iwanna.cn/topics/develope/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.iwanna.cn</link>
	<description></description>
	<lastBuildDate>Sat, 31 Jul 2010 15:12:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>一个显示排序过程的Python脚本</title>
		<link>http://www.iwanna.cn/archives/2010/07/13/4513/</link>
		<comments>http://www.iwanna.cn/archives/2010/07/13/4513/#comments</comments>
		<pubDate>Tue, 13 Jul 2010 13:26:20 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Algorithm]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=4513</guid>
		<description><![CDATA[之前向大家介绍过《一个排序算法比较的网站》，那个网站用动画演示了各种排序算法，并分析了各种排序算法。这里，要向大家推荐一个 Python脚本，其可以把排序的过程给显示出来。
下图是“冒泡排序”的一个示例，其中：

折线表示了各个元素的位置变化。
折线的深浅表示了元素的大小。越深则越大。



同样，还有其它一些排序算法的图片：
堆排序（Heap Sort）

选择排序（Selection）

快速排序（Quick）

Shell排序

插入排序（Insertion）

你可以使用如下的Python代码来制作这些图片：（需要 Cairo图片库支持）
Python 排序脚本
这个脚本参数如下：

-a 表示使用什么样的算法，取值为"quick", "heap", "selection",  "insertion", "bubble", "shell"。
-n 表示要排序的数据个数。
-f 表示输入文件。
-p 表示文件前缀。
-d 表示输出顺序。
-x 图片宽度。
-y 图片高度。
-l 所有线的宽度。
-b 边界宽度。

使用示例如下：
./visualise.py -l 6 -x 700 -y  300 -n 15 

© 我想网 Akon 所有 , 2010. &#124;
永久链接 &#124;
没有评论 &#124;
提交到
Google Reader
鲜果
抓虾


	标签：Algorithm, Algorithm, Python, Python

	您可能会感兴趣的其他文章
	
	递归－三角数字 
	用PHP数组对百万数据进行排重 
	浅谈递归过程以及递归的优化 
	检查素数的正则表达式 
	排序－选择 
	排序－插入 
	排序－冒泡 
	排序算法汇总 
	国外PHP开发者放弃PHP而改用Python 
	全文检索中近义词、关联词的解决方案 



Feed enhanced by Better [...]]]></description>
			<content:encoded><![CDATA[<p>之前向大家介绍过《<a rel="bookmark" href="http://www.iwanna.cn/archives/2010/07/13/4511/" title="一个排序算法比较的网站">一个排序算法比较的网站</a>》，那个网站用动画演示了各种排序算法，并分析了各种排序算法。这里，要向大家推荐一个 <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>脚本，其可以把排序的过程给显示出来。</p>
<p>下图是“<strong>冒泡排序</strong>”的一个示例，其中：</p>
<ol>
<li>折线表示了各个元素的位置变化。</li>
<li>折线的深浅表示了元素的大小。越深则越大。</li>
</ol>
<p><span id="more-4513"></span><br />
<a href="http://images.uheed.com/iwanna/2010/07/13/pythod-sort/bubble.png"><img title="bubble" src="http://images.uheed.com/iwanna/2010/07/13/pythod-sort/bubble.png" alt="bubble" width="600" height="225" /></a></p>
<p>同样，还有其它一些排序算法的图片：</p>
<p><strong>堆排序（Heap Sort）</strong></p>
<p><a href="http://images.uheed.com/iwanna/2010/07/13/pythod-sort/heap.png"><img title="heap" src="http://images.uheed.com/iwanna/2010/07/13/pythod-sort/heap.png" alt="heap" width="600" height="225" /></a></p>
<p><strong>选择排序（Selection）</strong></p>
<p><a href="http://images.uheed.com/iwanna/2010/07/13/pythod-sort/selection.png"><img title="selection" src="http://images.uheed.com/iwanna/2010/07/13/pythod-sort/selection.png" alt="selection" width="600" height="225" /></a></p>
<p><strong>快速排序（Quick）</strong></p>
<p><a href="http://images.uheed.com/iwanna/2010/07/13/pythod-sort/quick.png"><img title="quick" src="http://images.uheed.com/iwanna/2010/07/13/pythod-sort/quick.png" alt="quick" width="600" height="225" /></a></p>
<p><strong>Shell排序</strong></p>
<p><a href="http://images.uheed.com/iwanna/2010/07/13/pythod-sort/shell.png"><img title="shell" src="http://images.uheed.com/iwanna/2010/07/13/pythod-sort/shell.png" alt="shell" width="600" height="225" /></a></p>
<p><strong>插入排序（Insertion）</strong></p>
<p><a href="http://images.uheed.com/iwanna/2010/07/13/pythod-sort/listinsertion.png"><img title="listinsertion" src="http://images.uheed.com/iwanna/2010/07/13/pythod-sort/listinsertion.png" alt="listinsertion" width="600" height="225" /></a></p>
<p>你可以使用如下的<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码来制作这些图片：（需要 <a onclick="pageTracker._trackPageview('/outgoing/cairographics.org/?referer=http%3A%2F%2Fcoolshell.cn%2F%3Fp%3D2583');" href="http://cairographics.org/">Cairo</a>图片库支持）</p>
<p><a href="http://images.uheed.com/iwanna/2010/07/13/pythod-sort/visualise.py"><strong>Python 排序脚本</strong></a></p>
<p>这个脚本<code>参数如下：</code></p>
<ul>
<li><code>-a 表示使用什么样的算法，取值为"quick", "heap", "selection",  "insertion", "bubble", "shell"。</code></li>
<li><code>-n 表示要排序的数据个数。</code></li>
<li><code>-f 表示输入文件。</code></li>
<li><code>-p 表示文件前缀。</code></li>
<li><code>-d 表示输出顺序。</code></li>
<li><code>-x 图片宽度。</code></li>
<li><code>-y 图片高度。</code></li>
<li><code>-l 所有线的宽度。</code></li>
<li><code>-b 边界宽度。</code></li>
</ul>
<p><code>使用示例如下：</code></p>
<p><code>./visualise.py -l 6 -x 700 -y  300 -n 15 </code></p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2010. |
<a href="http://www.iwanna.cn/archives/2010/07/13/4513/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2010/07/13/4513/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2010/07/13/4513/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2010/07/13/4513/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2010/07/13/4513/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/topics/develope/algorithm/" title="Algorithm" rel="tag nofollow">Algorithm</a>, <a href="http://www.iwanna.cn/tags/algorithm/" title="Algorithm" rel="tag nofollow">Algorithm</a>, <a href="http://www.iwanna.cn/topics/develope/python/" title="Python" rel="tag nofollow">Python</a>, <a href="http://www.iwanna.cn/tags/python/" title="Python" rel="tag nofollow">Python</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2009/03/31/71/" title="递归－三角数字 (2009年03月31日)">递归－三角数字</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/08/3769/" title="用PHP数组对百万数据进行排重 (2010年06月8日)">用PHP数组对百万数据进行排重</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/21/4661/" title="浅谈递归过程以及递归的优化 (2010年07月21日)">浅谈递归过程以及递归的优化</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/23/4680/" title="检查素数的正则表达式 (2010年07月23日)">检查素数的正则表达式</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/03/31/69/" title="排序－选择 (2009年03月31日)">排序－选择</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/03/31/75/" title="排序－插入 (2009年03月31日)">排序－插入</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/03/31/73/" title="排序－冒泡 (2009年03月31日)">排序－冒泡</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/05/03/929/" title="排序算法汇总 (2009年05月3日)">排序算法汇总</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/11/3900/" title="国外PHP开发者放弃PHP而改用Python (2010年06月11日)">国外PHP开发者放弃PHP而改用Python</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/09/323/" title="全文检索中近义词、关联词的解决方案 (2009年04月9日)">全文检索中近义词、关联词的解决方案</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2010/07/13/4513/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python 语言快速入门教学</title>
		<link>http://www.iwanna.cn/archives/2010/06/24/4177/</link>
		<comments>http://www.iwanna.cn/archives/2010/06/24/4177/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 12:56:00 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=4177</guid>
		<description><![CDATA[为非程序员准备的简洁Python语言教材。
Python 的中文意思是巨蟒，大蟒蛇。

快速 Python 语言入门教学，课程，课件，教材，自学，概念

计算机编程主要概念

基本编程
定义函数
循环 (loop)



Python 数据概念

列表 (list)
元组 (tuple)
字典 (dict)
集合 (set)
模块 (module)
类 (class)
字符串的对象性质


Python 程序员编程习惯
参考资料



计算机编程主要概念¶
计算机语言编程的主要内容就这些：数字，文字，循环，公式，变量

数字: 1, 2, 3, 5.6, 120, 32.4, 3.1415926, -3, -0.123


文字: 你好，我好，你太牛了，很黄很暴力，这类的文字。一般用双引号(&#8220;)或者单引号(&#8216;)括起来。术语叫字符串 ，就是一堆字符，串起来。


循环: 循环(loop)就是重复的做一件事。计算机是一个很笨的机器，基本上只会做加，减，乘，除，大于，小于，等于和循环这种简单的工作。编程就是把复杂的问题，拆成简单的单元让它重复。

幸亏有下面讲到的公式，所以很多较复杂的问题已经有了解决方法，我们只是重复的套用别人的解决公式就可以了，不用拆得太细。
Python 语言最大的优势，就是这个语言中包含了大量解决常见问题的公式，你想干的事，基本上都有人帮你干了，你只是需要把他们组织，捆绑起来就可以了。比如下载文件的公式，分析网页内容的公式，压缩文件的公式，处理电子邮件的公式等等。

公式: 就像数学公式 (a+b)2= a2 + 2ab + b2 这种。算的时候带入具体数值，比如：(3+4)2 = 32 + 2*3*4 + 42 = 9+24+16 = 49 。前面的 (a+b)2 就是我们的公式名（当然编程时，我们会用一些比较容易明白的词组做为公式名，比如“和的平方”这种，英语或者拼音都可以），他需要两个参数a，b；后面的 a2 + 2ab + b2 是具体怎么算出来的步骤，这就是我们的公式内容。

在计算机里，公式的术语叫“函数”或者“方法”。我们定义一个函数，就是定义一条公式，用的时候，拿来参数a,b什么的，套一下公式就行了。
为了程序的结构清晰，我们往往会定义很多函数。把复杂的问题分成很多小问题，每个小问题放到一个函数里，然后在解决复杂问题的函数里，使用这些小问题函数解决大问题。更重要的是我们可以大量的使用别人写好的函数来解决自己的问题。
函数的作用是让程序结构清晰，而且可以在不同的地方重复套用。

变量: 就是上面的a，b这种可以代表任何值，可以放进不定值的单词，变量，变量，它代表的量可能会改变。我们用变量来存储我们程序中用到的各种数字，文字，公式。所谓参数，就是定义公式时候用到的变量，就叫参数，换个马甲而已。

换成术语，我们有：



数字 (number)
=&#62;
数字


字符串 [...]]]></description>
			<content:encoded><![CDATA[<p>为非程序员准备的简洁<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>语言教材。</p>
<p><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a> 的中文意思是巨蟒，大蟒蛇。</p>
<ul>
<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E5%BF%AB%E9%80%9F_Python_%E8%AF%AD%E8%A8%80%E5%85%A5%E9%97%A8%E6%95%99%E5%AD%A6%EF%BC%8C%E8%AF%BE%E7%A8%8B%EF%BC%8C%E8%AF%BE%E4%BB%B6%EF%BC%8C%E6%95%99%E6%9D%90%EF%BC%8C%EF%BF%BD">快速 Python 语言入门教学，课程，课件，教材，自学，概念</a>
<ul>
<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BC%96%E7%A8%8B%E4%B8%BB%E8%A6%81%E6%A6%82%E5%BF%B5">计算机编程主要概念</a>
<ul>
<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E5%9F%BA%E6%9C%AC%E7%BC%96%E7%A8%8B">基本编程</a></li>
<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E5%AE%9A%E4%B9%89%E5%87%BD%E6%95%B0">定义函数</a></li>
<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E5%BE%AA%E7%8E%AF_%28loop%29">循环 (loop)</a></li>
</ul>
<p><span id="more-4177"></span>
</li>
<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#Python_%E6%95%B0%E6%8D%AE%E6%A6%82%E5%BF%B5">Python 数据概念</a>
<ul>
<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E5%88%97%E8%A1%A8_%28list%29">列表 (list)</a></li>
<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E5%85%83%E7%BB%84_%28tuple%29">元组 (tuple)</a></li>
<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E5%AD%97%E5%85%B8_%28dict%29">字典 (dict)</a></li>
<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E9%9B%86%E5%90%88_%28set%29">集合 (set)</a></li>
<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E6%A8%A1%E5%9D%97_%28module%29">模块 (module)</a></li>
<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E7%B1%BB_%28class%29">类 (class)</a></li>
<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E5%AF%B9%E8%B1%A1%E6%80%A7%E8%B4%A8">字符串的对象性质</a></li>
</ul>
</li>
<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#Python_%E7%A8%8B%E5%BA%8F%E5%91%98%E7%BC%96%E7%A8%8B%E4%B9%A0%E6%83%AF">Python 程序员编程习惯</a></li>
<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99">参考资料</a></li>
</ul>
</li>
</ul>
<h2><a name="计算机编程主要概念">计算机编程主要概念</a><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BC%96%E7%A8%8B%E4%B8%BB%E8%A6%81%E6%A6%82%E5%BF%B5">¶</a></h2>
<p>计算机语言编程的主要内容就这些：数字，文字，循环，公式，变量</p>
<ul>
<li>数字: 1, 2, 3, 5.6, 120, 32.4, 3.1415926, -3, -0.123</li>
</ul>
<ul>
<li>文字: 你好，我好，你太牛了，很黄很暴力，这类的文字。一般用双引号(&#8220;)或者单引号(&#8216;)括起来。术语叫<strong>字符串</strong> ，就是一堆字符，串起来。</li>
</ul>
<ul>
<li>循环: 循环(loop)就是重复的做一件事。计算机是一个很笨的机器，基本上只会做加，减，乘，除，大于，小于，等于和循环这种简单的工作。编程就是把复杂的问题，拆成简单的单元让它重复。</li>
</ul>
<blockquote><p>幸亏有下面讲到的公式，所以很多较复杂的问题已经有了解决方法，我们只是重复的套用别人的解决公式就可以了，不用拆得太细。</p></blockquote>
<blockquote><p><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a> 语言最大的优势，就是这个语言中包含了大量解决常见问题的公式，你想干的事，基本上都有人帮你干了，你只是需要把他们组织，捆绑起来就可以了。比如下载文件的公式，分析网页内容的公式，压缩文件的公式，处理电子邮件的公式等等。</p></blockquote>
<ul>
<li>公式: 就像数学公式 (a+b)<sup>2</sup>= a<sup>2</sup> + 2ab + b<sup>2</sup> 这种。算的时候带入具体数值，比如：(3+4)<sup>2</sup> = 3<sup>2</sup> + 2*3*4 + 4<sup>2</sup> = 9+24+16 = 49 。前面的 (a+b)<sup>2</sup> 就是我们的公式名（当然编程时，我们会用一些比较容易明白的词组做为公式名，比如“和的平方”这种，英语或者拼音都可以），他需要两个参数a，b；后面的 a<sup>2</sup> + 2ab + b<sup>2</sup> 是具体怎么算出来的步骤，这就是我们的公式内容。</li>
</ul>
<blockquote><p>在计算机里，公式的术语叫“<strong>函数</strong>”或者“方法”。我们定义一个函数，就是定义一条公式，用的时候，拿来参数a,b什么的，套一下公式就行了。</p></blockquote>
<blockquote><p>为了程序的结构清晰，我们往往会定义很多函数。把复杂的问题分成很多小问题，每个小问题放到一个函数里，然后在解决复杂问题的函数里，使用这些小问题函数解决大问题。更重要的是我们可以大量的使用别人写好的函数来解决自己的问题。</p></blockquote>
<blockquote><p>函数的作用是让程序结构清晰，而且可以在不同的地方重复套用。</p></blockquote>
<ul>
<li>变量: 就是上面的a，b这种可以代表任何值，可以放进不定值的单词，变量，变量，它代表的量可能会改变。我们用变量来存储我们程序中用到的各种数字，文字，公式。所谓参数，就是定义公式时候用到的变量，就叫参数，换个马甲而已。</li>
</ul>
<p>换成术语，我们有：</p>
<table>
<tbody>
<tr>
<td>数字 (number)</td>
<td>=&gt;</td>
<td>数字</td>
</tr>
<tr>
<td>字符串 (string)</td>
<td>=&gt;</td>
<td>文字</td>
</tr>
<tr>
<td>循环 (loop)</td>
<td>=&gt;</td>
<td>循环</td>
</tr>
<tr>
<td>函数／方法 (function/method)</td>
<td>=&gt;</td>
<td>公式</td>
</tr>
<tr>
<td>变量 (variable)</td>
<td>=&gt;</td>
<td>变量</td>
</tr>
</tbody>
</table>
<p>到这里，基本上编程就没什么可学得了。剩下的就是掌握各种编程语言特定的函数和循环的书写格式，再掌握了别人已经写好的函数的用法，组合起来就得了。</p>
<h3><a name="基本编程">基本编程</a><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E5%9F%BA%E6%9C%AC%E7%BC%96%E7%A8%8B">¶</a></h3>
<p>最基本的<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>程序：</p>
<pre>print ("世界，你好！")</pre>
<p>存到文件 hello.py 里，然后命令行下输入 <tt><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a> hello.py</tt> 就可以看到结果了。</p>
<p>这里就用到了函数和字符串，在屏幕上输出一行：<em>世界，你好！</em></p>
<p><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a> 里函数的用法是：函数名(参数1, 参数2)</p>
<p>这里 print 是函数；在屏幕上打印内容，&#8221;世界，你好！&#8221;是参数，套 print 这个公式用的。</p>
<p>学会怎么用函数了，再学会定义函数的格式，就差不多了。</p>
<p><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a> 里注释符号是&#8221;#&#8221;。就是说，在 # 符号后的那一行文字，都当做解释，不做为程序的命令。</p>
<pre>print ("打酱油！") # print ("关我屁事")</pre>
<p>只打印出 “打酱油”，剩下的，因为是在 # 后面，所以程序把他们当做注释语言自动忽略了。</p>
<h3><a name="定义函数">定义函数</a><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E5%AE%9A%E4%B9%89%E5%87%BD%E6%95%B0">¶</a></h3>
<pre>def a_b_pingfang(a, b):
    c = a**2 + 2*a*b + b**2
    return c</pre>
<p>我们定义一个(a+b)<sup>2</sup>的函数，def 是英语 define 的缩写，意思是定义函数，定义公式。</p>
<p>第 1 行就是说我们要定义一个函数名叫 a_b_pingfang 的函数，用它的时候，需要两个参 数 a 和 b。尾巴上有个冒号，冒号的意思是说：“下面的一段话就是公式定义了，要注意了”。</p>
<blockquote><p>计算机编程里，<tt>*</tt> 代表乘法，<tt>/</tt>代表除法，<tt>**</tt> 代表乘方， <tt>b**2</tt> 就是 b 的二次方。</p></blockquote>
<p>注意： <strong><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a> 是用 <em>缩进空格</em> 来表示段落的，冒号(:)来表示段落开始。</strong></p>
<p>第 2 行先缩进4个空格，说明下面缩进4格的，都是同一段落，用来具体计算上面定义的公式的。把 a<strong></strong>2+2*a*b+b<strong></strong>2 的计算结果，放到c里。</p>
<p>c类似于a，b，都是表示一个变量，它可以用来存放数字，文字，甚至函数。这里它存放的是用a，b计算后得到的结果。因为不是在函数名里，所以术语叫做“变量”，用在函数名里，就叫参数了。</p>
<p>“变量”就是用一个单词来代表一个可以变化的量的。单词里可以有字母，数字和下加线(<tt>_</tt>)，数字不能打头。</p>
<p>第 3 行，把存在c里的结果，传回给函数的使用者。</p>
<p>return 命令的意思，就是立即结束函数的执行，把return后面的值传给调用者，可以传回多个值。</p>
<p>现在可以使用这个公式了，我们把套公式叫<strong>调用函数</strong> ：</p>
<pre>ping2 = a_b_pingfang(2, 3)</pre>
<p>ping2 里存放了 a_b_pingfang(2, 3)得到的结果，也就是上面 <tt>return c</tt> 这句，把 c 的内容，传给了外面的ping2。</p>
<p>把结果打印出来：</p>
<pre>print(ping2)</pre>
<p>全部程序就是：</p>
<pre>def a_b_pingfang(a, b):
    c = a**2 + 2*a*b + b**2
    return c
ping2 = a_b_pingfang(2, 3)
print(ping2)</pre>
<p>存到 test2.py ，跑 <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a> test2.py 就可以看到输出 25。</p>
<h3><a name="循环_(loop)">循环 (loop)</a><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E5%BE%AA%E7%8E%AF_%28loop%29">¶</a></h3>
<p>当然还有循环，怎么让程序重复的做事？我们有 while(当&#8230;), for(对于&#8230;) 命令来进行循环控制。</p>
<pre>a = 0
while a &lt; 100:
   a = a + 1
   print a</pre>
<p>这个循环说，当 a &lt; 100 的时候，把 a 增加 1，再把它打印出来，然后重复。当 a 等于100了，条件不符合了，就结束了。</p>
<p>我们有 &lt;, &gt;, ==, &lt;=, &gt;=, != 来判断大于，小于，等于，小于等于，大于等于，不等于。</p>
<p>还有 <tt>and</tt>(并且), <tt>or</tt>(或者), <tt>not</tt>(不是) 来进行逻辑运算，所谓逻辑运算，就是测试多个不同判断之间的关系的：</p>
<blockquote><p><tt>(a == 1) and (b != 2)</tt> 来测试这两个判断是否同时成立：a 等于 1 并且 b 不等于 2。 <tt>(a == 1) or (b != 2)</tt> 来测试这两个判断里是否有至少一个成立：a 等于 1 或者 b 不等于 2。 <tt>not a == 1</tt> 来测试这个判断是否是错的。错的就是对的，对的就是错的，颠倒黑白：不是 a 等于 1，那就是 a 不等于 1 了，好像有点脱裤子放屁。其实在别的更复杂的判断组合里更有用些。</p></blockquote>
<p>我们还有 break(中断) 来打断循环，和 continue(继续) 来立刻回到循环开始，也可以用 if(如果) 命令来进行判断：</p>
<pre>a = 0
while True:
    a = a + 1
    if a &gt;= 100:
        break
    print a</pre>
<p>这里 True(正确) 表示永远正确，相对的是 False(错误) 表示永远错误。这一段是说一直执行，因为 while 的条件总是正确，就是说“当符合总是正确的条件的时候，不断重复”，当然是永远正确，永远重复了。下面在 if 处判断如果a大于等于100，如果是，那么执行 if 下的段落，这里我们打断了循环。如果条件不符，就跳过 if 下面的小段落，该干嘛干嘛，具体到这里就是打印 a 然后继续执行循环。</p>
<p>for 循环是利用下面介绍的的列表数据结构对列表进行循环。</p>
<h2><a name="Python_数据概念">Python 数据概念</a><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#Python_%E6%95%B0%E6%8D%AE%E6%A6%82%E5%BF%B5">¶</a></h2>
<p>下面具体说到<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>特异功能，它有几个特殊的存储数据的格式。</p>
<ul>
<li>列表: list</li>
<li>元组: tuple</li>
<li>字典: dict (dictionary)</li>
<li>集合: set</li>
</ul>
<h3><a name="列表_(list)">列表 (list)</a><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E5%88%97%E8%A1%A8_%28list%29">¶</a></h3>
<p>列表：把很多变量存进一个列表里，叫列的意思，就因为他像列车一样，一节一节车厢，每厢放一个变量。格式为 b, c, 1, 3, 5, &#8216;葡萄&#8217;, &#8216;葡萄皮儿&#8217;，可以看到，方括号里，可以放具体的数字，文字，也可以放变量，用逗号分隔。</p>
<p>这些内容是在固定位置上，可以通过他们的位置，来提取：</p>
<pre>alist = [1, 3, 5, '很傻', '葡萄', '葡萄皮儿', a, var1]
print (alist[0]) # 打印 1
print (alist[3]) # 打印 "很傻"</pre>
<blockquote><p>在 <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>里，次序是从0开始数的，开始是0，然后是1，2，3，4，5，所以上面的列表 alist的第一个内容，可以用<tt>alist[0]</tt>来提取，第二个用<tt>alist[1]</tt>来提取。就像年龄一样，一生下来是零岁，一年以后才是一岁，不是中国传统那样，生下来就一岁，那是虚岁。蟒蛇语言它只认准确的东西，不玩儿虚的。</p></blockquote>
<p><tt>print (alist[4]) # 打印 '葡萄' </tt></p>
<p>这里，我们可以介绍用 for 循环来访问这个列表里的所有内容：</p>
<pre>for me in alist:
    print (me)</pre>
<p>上面这一段，打印所有alist里的内容。</p>
<p>这个循环是，对于列表 alist ，从 0 位置开始，访问它的每一个位置，把这个位置上的值， 放到 me 里，然后针对不同的 me 值，重复执行下面段落的内容。</p>
<blockquote><p><tt>in</tt> 表示 me 在 alist 里，也可以用来判断：</p>
<pre>  if "葡萄" in alist:
     print "葡萄在alist里！"</pre>
</blockquote>
<p>列表的内容是可以改变的，我们可以把第4个位置设为&#8221;很天真&#8221;:</p>
<pre>alist[3] = alist[3] + ' 很天真'
print (alist[3]) # 打印 '很傻 很天真'</pre>
<p>下面说道的元组的内容就不能改变了。</p>
<h3><a name="元组_(tuple)">元组 (tuple)</a><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E5%85%83%E7%BB%84_%28tuple%29">¶</a></h3>
<p>元组：元组就是列表，但是他的内容是不能改变的，用圆括号()来表示。 他的内容只能一开始就设定。但是，元组和列表之间是可以用函数互相转变的，转成列表就可以改变内容，转回元组就不能改了。</p>
<p>元组是用圆括号来表示，所以叫元组嘛。</p>
<pre>atuple = (2, 3, "老子")
alist = list(atuple) # 变成 [2, 3, "老子"]
alist[0] = 0
tuple2 = tuple(alist) # 变回 (0, 3, "老子")</pre>
<p>在 <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a> 里，字符串也是一种特殊的元组，也就是内容不可变的字符列表。</p>
<pre>txt = 'abcdefg'
print(txt[1]) # 打印 b</pre>
<h3><a name="字典_(dict)">字典 (dict)</a><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E5%AD%97%E5%85%B8_%28dict%29">¶</a></h3>
<p>字典：字典就像一般的字典，一个字，一个解释，再一个字，再一个解释。用大括号表示：</p>
<pre>adict = {1: "我是解释",
  2: "我是解释2",
  "我是3": 3,
  "我是4": 4
  }</pre>
<p>前面的字叫钥匙(key)或者索引，后面的解释，叫&#8221;值&#8221;。索引不能重复，必须是唯一的。</p>
<p>我们可以看到，前面的字，和后面的解释可以是数字，文字，还可以是函数或者元组。但是前面的字，不能是列表，因为列表内容是可变的，可变的东西都不能做索引。</p>
<p>我们用索引来提取，设定或者增加值，而不是用位置：</p>
<pre>adict[1] # "我是解释"
adict["我是3"] # 3
adict[1] = 2 # 设定新的值
adict["新索引"] = "没头脑和不高兴" # 增加一个新索引和值</pre>
<h3><a name="集合_(set)">集合 (set)</a><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E9%9B%86%E5%90%88_%28set%29">¶</a></h3>
<p>集合: 集合就是数学上用的集合，把一堆东西放到一起，类似列表，不同的地方是内容不重复，而且也没有次序。</p>
<pre>aset = set([1, 2, 3, 2, 4, 6]) # 去掉重复内容，所以是 1,2,3,4,6</pre>
<p>可以看出，建立一个集合的方式，是使用set()函数，函数的参数可以是列表，或者元祖，反正是一串儿的都可以。</p>
<p>集合的用处是利用他内容不可重复的特性，来去掉重复的内容。至于其他的合集，交集也是这个特性的延伸。</p>
<p>集合也是可以变成列表的，利用 list() 函数。</p>
<pre>alist = list(aset) # 内容 [1,2,3,4,6]</pre>
<h3><a name="模块_(module)">模块 (module)</a><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E6%A8%A1%E5%9D%97_%28module%29">¶</a></h3>
<p><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a> 里包涵了很多别人写好的函数、方法让我们直接利用。譬如写网络程序的函数，数 学计算的函数，分析电邮文件的函数，加密的函数。我们要做的就是<strong>套公式</strong>！</p>
<p>这些函数分门别类的放到叫“模块”的东西里。一个模块里，包括很多功能相类的函数。而具体实现上，一个模块，就是一个<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>的程序文件。</p>
<p>如果模块还需要细分更多层，那么每层就是一个文件目录。里面有很多做为模块的<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>文件。</p>
<p>要使用模块，我们用“进口”这个命令: import</p>
<pre>import time
now = time.clock()
print (now)</pre>
<p>这里，我们先进口 time 模块，然后使用 time 模块里的函数 clock() ，得到当前时间，打印出来。</p>
<p>用个英文句点表示模块 time里的clock函数: 模块名.函数名</p>
<p>在 <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a> 里，我们会用到很多别人写的模块，能自己少写点儿源码，尽量少写，懒不是？</p>
<h3><a name="类_(class)">类 (class)</a><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E7%B1%BB_%28class%29">¶</a></h3>
<p>其实编程来说，类并不是必须的，但是因为很多<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>提供的模块，里面的函数都是包在类里面的，所以我们需要介绍一下类。</p>
<p>面向对象编程，是现在比较流行的编程方式，是个人都得用“面像对象”的思路来编程，来显得自己跟得上形式。其实面对对象并不是必须的，光棍并不可耻。</p>
<p>类就是种类的意思。</p>
<p>基本上面对对象就是把同类的函数，变量打包放到一个包袱里，这个包袱就叫“类”。挺土气是吧？其实面对对象也并不就一定时髦，也可以俗不可耐，就看你包袱打的怎么样了。</p>
<p>这个 “类”一般上是以具体的东西为模板，譬如物种：人类，猫类；物品：家俱类，电器类。他里面打包的函数，基本上是针对这个类进行操作的，譬如人说话，人吃饭，人的鼻子人的嘴，猫逮耗子，家居磨损。</p>
<p>使用类的时候，我们先具体化他，把种类变成个体。人类变成某人，猫类变成某猫，家俱变成某件家俱。这个具体化的类，就是所谓的“对象(object)”。然后我们就可以使用这个具体人，猫，家居的函数，针对具体的人，物进行操作了，所谓操作对象。</p>
<h4><a name="定义类">定义类</a><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E5%AE%9A%E4%B9%89%E7%B1%BB">¶</a></h4>
<pre>class RenLei:
    def __init__(self, mingzi):  # self 是一个固定参数名，代表这个对象自己。
        self.mingzi = mingzi     # 把名字存到对象自己的 mingzi 变量上。
    def shui2(self):             # 谁函数
        return self.mingzi</pre>
<p>上面的例子，一开始就要求给这个对象一个名字。</p>
<p>在类的定义里，每一个函数，他的第一个参数，都是规定死的，必须是self。self代表这个对象自己。在对象内部，这个对像本身的变量，函数，都是通过这个self来存取的。</p>
<p>在调用类里的函数时，不用提供 self 这个参数，程序自动提供 self，让我们使用它其他的函数，变量。我们只要提供其他参数即可。</p>
<p><tt>__init__()</tt> 这个函数是一个特殊的函数，他代表从类具体化到对象的时候，需要套用的公式。</p>
<p>通过类建立对象的时候，程序会自动调用 <tt>__init__()</tt>函数。所以它叫做初始化函数。建立对象的时候，有什么一开始的要求，都可以通过它来指定，比如要求“脚不大好头发没有麻子”。</p>
<p>当然如果没有初始要求，也可以不定义这个函数，那么程序就不会自动调用它了。</p>
<h4><a name="具体化类，建立对象">具体化类，建立对象</a><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E5%85%B7%E4%BD%93%E5%8C%96%E7%B1%BB%EF%BC%8C%E5%BB%BA%E7%AB%8B%E5%AF%B9%E8%B1%A1">¶</a></h4>
<pre># 建立对象，提供的函数对应__init__() 函数，self 这个参数程序会自动提供，不用我们提供。
xiaozhang1 = RenLei("小张")
mingzi = xiaozhang1.shui2()  # 使用“对象名.函数名()”的格式来调用类里的函数。
print mingzi &lt;-- "小张"</pre>
<h3><a name="字符串的对象性质">字符串的对象性质</a><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E5%AF%B9%E8%B1%A1%E6%80%A7%E8%B4%A8">¶</a></h3>
<p><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a> 里的字符串，列表，元组，字典，它们本身都是面对对象的类，所以带有很多函数可以对自己进行操作，譬如：</p>
<pre>a = "脚不大好 头发没有 麻子".split()</pre>
<p>split 是字符串这个类的函数，他可以把字符串在给定位置分割，当我们不给他参数的时候，会在所有空白位置分割，然后返回一个列表，里面是被割裂的字符串。</p>
<p>结果，a 的内容是 <tt>["脚不大好", "头发没有", "麻子"]</tt>，这是一个有3个元素的列表。</p>
<p>对于字符串，列表，字典之类的操作，请熟读说明手册对他们的说明，<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>编程，主要就靠字符串，列表和字典了。</p>
<h2><a name="Python_程序员编程习惯">Python 程序员编程习惯</a><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#Python_%E7%A8%8B%E5%BA%8F%E5%91%98%E7%BC%96%E7%A8%8B%E4%B9%A0%E6%83%AF">¶</a></h2>
<p>重中之重: 大量的使用 list 这个列表方式来存储、操作数据。一字长蛇阵是蟒蛇的绝招，多用没错。</p>
<p>写一个 <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a> 程序，我们一般的步骤是：</p>
<ol>
<li>进口所有会用到到模块 import</li>
<li>定义我们自己的类和函数。对于每个函数里要用到的函数，被调用的函数一般放在调用函数的前面定义。这样我们读程序的时候，如果从上到下，就知道调用的函数，在前面是怎么定义的，有什么功能，需要什么参数，返回什么值。</li>
<li>在文件的最下面，调用上面定义的函数和类，开始工作。</li>
<li>命令行的选项是通过 sys.argv 这个列表得到的。</li>
<li>尽量使用 <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>提供的内建函数和模块里的函数，所以我们对<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的模块说明手册要很熟悉。</li>
</ol>
<p><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a> 运行，是从文件的上面往下走的，看到一条命令执行一条命令，一直到最后一行。当我们定义函数和类的时候，他们只是定义，而没有执行，所以<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a> 看到他们，先存起来，直到看到定义外的具体命令，才真正的执行。如果这个命令调用上面的函数，那么就把存起来的函数执行一下。</p>
<p>完整例子： 把一个两列的文件input.txt，分割成两个文件col1.txt, col2.txt，一个文件一列。 input.txt 内容:</p>
<pre>a1 啊阿
ai1 挨埃哀
ao2 熬鳌翱獒</pre>
<p>程序内容：</p>
<pre>def split_file(filename): # 把文件分成两列
    col1 = [] # 存储第一列
    col2 = []
    fd = open(filename) # open 函数用来打开文件，返回一个文件对象
    text = fd.read() # fd.read 读入文件fd 的内容。
    lines = text.splitlines() # 把读入的内容分行
    for line in lines: # 循环每一行
        part = line.split(None, 1) # 分割一行。
        col1.append(part[0]) # 把分割的第一部分放到col1后面。
        col2.append(part[1])

    return col1, col2 # 返回 col1, col2

def write_list(filename, alist): # 把文字列表内容写入文件
    fd = open(filename, 'w') # 打开输出文件col1.txt，'w'指定使用写入模式。
    for line in alist:
         fd.write(line + '\n')

def main(): # 主函数，程序进入点，习惯性叫他 main()
    filename = 'input.txt'            # 把输入文件名 input.txt 放进一个变量
    col1, col2 = split_file(filename) # 调用分割函数，结果存入 col1, col2
    write_list('col1.txt', col1)      # 调用写入函数
    write_list('col2.txt', col2)

main() # 唯一的函数外命令，程序开始执行，调用上面的 main() 函数数。</pre>
<p>这里，输入的文件名是写死的 input.txt ，我们可以使用模块 optparse 来通过命令行读取用户提供的文件，会更灵活些，那些就是你研究过 optparse 以后的事了。</p>
<h2><a name="参考资料">参考资料</a><a href="http://www.iwanna.cn/archives/2010/06/24/4177/ChinesePythonTutor#%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99">¶</a></h2>
<p>更多的功能，函数，请参考<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>的<a rel="nofollow" href="http://www.chinesepython.org/pythonfoundry/harrypydoc/html/tut.html">官方教学</a>和手册。</p>
<p>先熟悉:</p>
<ul>
<li>内建函数</li>
<li>内建数据类型 (字符串，数字，列表，字典，文件对象)</li>
<li>sys 模块</li>
<li>re 模块</li>
<li>os 模块</li>
<li>optparse 模块</li>
</ul>
<p>熟悉这些，基本上编程没问题了。</p>
<p><a rel="nofollow" href="http://www.woodpecker.org.cn/diveintopython/toc/index.html">深入 Python</a>是一本经典的参考书，虽然没有涵盖所有<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>模块的内容，但是对初学者基本够用。而且它是一个自由文件，说俗了就是合法免费的，又有中文翻译版，难得。</p>
<p>也可以参考 <a rel="nofollow" href="http://www.sogou.com/web?query=Python+%BE%F8%B6%D4%BC%F2%C3%F7%CA%D6%B2%E1">Python 绝对简明手册</a>这个中文说明。</p>
<p>如果需要网络编程，还要熟悉网络相关的模块，urllib2，socket，xml.etree.elementtree。</p>
<p>如果想要图形界面，建议使用pygtk或者pyqt图形界面函数库，这时候，也需要熟悉面对对象编程的概念。</p>
<p>对于英文不好的人，建议买一本有<a rel="nofollow" href="http://www.sogou.com/web?query=Python+%B1%E0%B3%CC&amp;startIndex=0">Python函数模块介绍的中文书</a>，作为参考书，在编程的时候，边编边翻书。</p>
<p><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a> 的中文意思是巨蟒，大蟒蛇。但是这个语言的具体出处是一个叫Monty <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的英 国电视剧。</p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2010. |
<a href="http://www.iwanna.cn/archives/2010/06/24/4177/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2010/06/24/4177/#comments">1条评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2010/06/24/4177/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2010/06/24/4177/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2010/06/24/4177/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/topics/develope/python/" title="Python" rel="tag nofollow">Python</a>, <a href="http://www.iwanna.cn/tags/python/" title="Python" rel="tag nofollow">Python</a>, <a href="http://www.iwanna.cn/tags/tutorial/" title="Tutorial" rel="tag nofollow">Tutorial</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2009/05/06/959/" title="Python 3 系列教程 &#8211; developerWorks 中国 (2009年05月6日)">Python 3 系列教程 &#8211; developerWorks 中国</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/30/915/" title="解密CSS Sprites：技巧、工具和教程 (2009年04月30日)">解密CSS Sprites：技巧、工具和教程</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/07/3765/" title="简单的JQuery聚光灯效果教程 (2010年06月7日)">简单的JQuery聚光灯效果教程</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/06/17/1828/" title="用jQuery和CSS构建下拉菜单 (2009年06月17日)">用jQuery和CSS构建下拉菜单</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/05/29/1215/" title="掌握强大的WordPress的子主题 (2009年05月29日)">掌握强大的WordPress的子主题</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/11/3900/" title="国外PHP开发者放弃PHP而改用Python (2010年06月11日)">国外PHP开发者放弃PHP而改用Python</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/17/4583/" title="制作jquery文字提示插件 (2010年07月17日)">制作jquery文字提示插件</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/05/09/3032/" title="使用Photoshop制作 Web 2.0 布局的网站 [4] (2010年05月9日)">使用Photoshop制作 Web 2.0 布局的网站 [4]</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/05/09/3029/" title="使用Photoshop制作 Web 2.0 布局的网站 [3] (2010年05月9日)">使用Photoshop制作 Web 2.0 布局的网站 [3]</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/05/09/3026/" title="使用Photoshop制作 Web 2.0 布局的网站 [2] (2010年05月9日)">使用Photoshop制作 Web 2.0 布局的网站 [2]</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2010/06/24/4177/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>国外PHP开发者放弃PHP而改用Python</title>
		<link>http://www.iwanna.cn/archives/2010/06/11/3900/</link>
		<comments>http://www.iwanna.cn/archives/2010/06/11/3900/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 15:47:12 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=3900</guid>
		<description><![CDATA[本文作者作为一名从事PHP开发11年的资深开发者，却放弃了PHP而改用Python。借助本文，作者与其说是解释了他做出这种选择的原因，不如 说是他对 PHP和Python两种语言的性能进行了比较。以下是作者的原文翻译：
我之所以放弃PHP，原因首先是语言。PHP实际上不是一种语言，而是一种巨大的插件结构，以一种高层的形式来展示低层的库。而大部分开发者使 用的 语言实际上是对C功能 (curl, mysql, gd,  etc.)的包装，通常情况下它们的库展示得很简单。因而这导致了PHP的API不一致。
PHP语言的第二个问题是语言的管理问题。PHP语言实际上是由委员会来设计的，而且没有人来制定任何共识性的标准。PEAR有自己的标准，PHP有自己 的标准，这导致SPL classes更具Java风格，而PEAR却截然不同。
从事PHP开发11年来，我认识了很多PHP领域的专家级开发者，它们对PHP也有很多看法。除了上文提到的委员会问题以及标准混乱问题之外，由于PHP 的使用范围非常广，向后的不兼容对代码造成了很大的破坏。
还要提到的一点是PHP缺乏很多现代语言的特性。现在再来说说Python：
Python语言的创建方法几乎与PHP的完全相反。首先，Python是由Benevolent Dictator和Guido van  Rossum领导的，语言的开发由单一的人员主导，因此它的开发、管理以及长期运营会保持很好的连续性。Guido和Python的核心开发者通过PEP   创建标准，而且通过公共接口展示标准是如何创建的。而且，Guido如果想到的语言特性不够好，也不会出现在语言层中（如没有++运算符，而且比较符中没  有分配）。
延续性的特点也延伸到了整个Python社区，所以你很难发现不同项目中的Python截然不同。
我最喜欢的Python的一个特点就是它的清晰。当打开Python中的一个文件的时候，我会清楚地知道里面大概有什么样子的代码，联想到很多次我被 PHP的这一点搞得焦头烂额，我觉得这个特性非常有用。
总之，Python的系统级特性非常不错。
Python另外一个很棒的特性是直白性。需要namespace(命名空间)？文件的名字就是命名空间；需要模块？只需要用一个__init__.py 文件代替；需要重命名功能？只需要new_func = old_func。

© 我想网 Akon 所有 , 2010. &#124;
永久链接 &#124;
没有评论 &#124;
提交到
Google Reader
鲜果
抓虾


	标签：PHP, PHP, Python, Python

	您可能会感兴趣的其他文章
	
	10个免费开源微博客程序 
	设计模式之单例模式 
	论述PHP开发框架: What, When, Why and Which? 
	腾讯PHP程序员面试题目 
	简易Wordpress模板代码帮助手册中文版 
	用PHP数组对百万数据进行排重 
	用 PHP 读取和编写 XML DOM 
	深入理解PHP之匿名函数 
	最快的 [...]]]></description>
			<content:encoded><![CDATA[<p>本文作者作为一名从事<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>开发11年的资深开发者，却放弃了<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>而改用<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>。借助本文，作者与其说是解释了他做出这种选择的原因，不如 说是他对 <a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>和<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>两种语言的性能进行了比较。以下是作者的原文翻译：</p>
<p>我之所以放弃<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>，原因首先是语言。<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>实际上不是一种语言，而是一种巨大的插件结构，以一种高层的形式来展示低层的库。而大部分开发者使 用的 语言实际上是对C功能 (curl, mysql, gd,  etc.)的包装，通常情况下它们的库展示得很简单。因而这导致了<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>的API不一致。</p>
<p><a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>语言的第二个问题是语言的管理问题。<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>语言实际上是由委员会来设计的，而且没有人来制定任何共识性的标准。PEAR有自己的标准，<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>有自己 的标准，这导致SPL classes更具Java风格，而PEAR却截然不同。</p>
<p>从事<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>开发11年来，我认识了很多<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>领域的专家级开发者，它们对<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>也有很多看法。除了上文提到的委员会问题以及标准混乱问题之外，由于<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a> 的使用范围非常广，向后的不兼容对代码造成了很大的破坏。</p>
<p>还要提到的一点是<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>缺乏很多现代语言的特性。现在再来说说<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>：</p>
<p><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>语言的创建方法几乎与<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>的完全相反。首先，<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>是由Benevolent Dictator和Guido van  Rossum领导的，语言的开发由单一的人员主导，因此它的开发、管理以及长期运营会保持很好的连续性。Guido和<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的核心开发者通过PEP   创建标准，而且通过公共接口展示标准是如何创建的。而且，Guido如果想到的语言特性不够好，也不会出现在语言层中（如没有++运算符，而且比较符中没  有分配）。</p>
<p>延续性的特点也延伸到了整个<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>社区，所以你很难发现不同项目中的<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>截然不同。</p>
<p>我最喜欢的<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的一个特点就是它的清晰。当打开<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>中的一个文件的时候，我会清楚地知道里面大概有什么样子的代码，联想到很多次我被 <a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>的这一点搞得焦头烂额，我觉得这个特性非常有用。</p>
<p>总之，<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的系统级特性非常不错。</p>
<p><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>另外一个很棒的特性是直白性。需要namespace(命名空间)？文件的名字就是命名空间；需要模块？只需要用一个__init__.py 文件代替；需要重命名功能？只需要new_func = old_func。</p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2010. |
<a href="http://www.iwanna.cn/archives/2010/06/11/3900/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2010/06/11/3900/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2010/06/11/3900/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2010/06/11/3900/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2010/06/11/3900/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/topics/develope/php/" title="PHP" rel="tag nofollow">PHP</a>, <a href="http://www.iwanna.cn/tags/php/" title="PHP" rel="tag nofollow">PHP</a>, <a href="http://www.iwanna.cn/topics/develope/python/" title="Python" rel="tag nofollow">Python</a>, <a href="http://www.iwanna.cn/tags/python/" title="Python" rel="tag nofollow">Python</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2010/02/03/2483/" title="10个免费开源微博客程序 (2010年02月3日)">10个免费开源微博客程序</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/02/149/" title="设计模式之单例模式 (2009年04月2日)">设计模式之单例模式</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/07/31/2088/" title="论述PHP开发框架: What, When, Why and Which? (2009年07月31日)">论述PHP开发框架: What, When, Why and Which?</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/08/3767/" title="腾讯PHP程序员面试题目 (2010年06月8日)">腾讯PHP程序员面试题目</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/03/171/" title="简易Wordpress模板代码帮助手册中文版 (2009年04月3日)">简易Wordpress模板代码帮助手册中文版</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/08/3769/" title="用PHP数组对百万数据进行排重 (2010年06月8日)">用PHP数组对百万数据进行排重</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/07/05/1933/" title="用 PHP 读取和编写 XML DOM (2009年07月5日)">用 PHP 读取和编写 XML DOM</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/20/4102/" title="深入理解PHP之匿名函数 (2010年06月20日)">深入理解PHP之匿名函数</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/08/20/2171/" title="最快的 PHP 模板引擎 Blitz Templates (2009年08月20日)">最快的 PHP 模板引擎 Blitz Templates</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/08/24/2193/" title="开发者不可不知的PHP框架深度解析 (2009年08月24日)">开发者不可不知的PHP框架深度解析</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2010/06/11/3900/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python程序员的进化</title>
		<link>http://www.iwanna.cn/archives/2010/06/04/3681/</link>
		<comments>http://www.iwanna.cn/archives/2010/06/04/3681/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 17:11:23 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=3681</guid>
		<description><![CDATA[下面这篇是关于Python程序员的。以阶乘为例，很有意思。
新手程序员
def factorial(x):
    if x == 0:
        return 1
    else:
        return x * factorial(x - 1)
print factorial(6)
第一年的刚学完Pascal的新手
def factorial(x):
    result = 1
    i = 2
    while i &#60;= x:
        result = result * i
        i = i + 1
    return result
print factorial(6)

第一年的刚学完C语言的新手
def fact(x): #{
    result = i = 1;
    while (i &#60;= x): #{
        result *= i;
        [...]]]></description>
			<content:encoded><![CDATA[<p>下面这篇是关于<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>程序员的。以阶乘为例，很有意思。</p>
<h4>新手程序员</h4>
<pre>def factorial(x):
    if x == 0:
        return 1
    else:
        return x * factorial(x - 1)
print factorial(6)</pre>
<h4>第一年的刚学完Pascal的新手</h4>
<pre>def factorial(x):
    result = 1
    i = 2
    while i &lt;= x:
        result = result * i
        i = i + 1
    return result
print factorial(6)</pre>
<p><span id="more-3681"></span></p>
<h4>第一年的刚学完C语言的新手</h4>
<pre>def fact(x): #{
    result = i = 1;
    while (i &lt;= x): #{
        result *= i;
        i += 1;
    #}
    return result;
#}
print(fact(6))</pre>
<h4>第一年刚学完SICP的新手</h4>
<pre>@tailcall
def fact(x, acc=1):
    if (x &gt; 1): return (fact((x - 1), (acc * x)))
    else:       return acc
print(fact(6))</pre>
<h4>第一年刚学完<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的新手</h4>
<pre>def Factorial(x):
    res = 1
    for i in xrange(2, x + 1):
        res *= i
    return res
print Factorial(6)</pre>
<h4>爱偷懒的程序员</h4>
<pre>def fact(x):
    return x &gt; 1 and x * fact(x - 1) or 1
print fact(6)</pre>
<h4>更懒的 <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a> 程序员</h4>
<pre>f = lambda x: x and x * f(x - 1) or 1
print f(6)</pre>
<h4><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a> 专家</h4>
<pre>import operator as op
import functional as f
fact = lambda x: f.foldl(op.mul, 1, xrange(2, x + 1))
print fact(6)</pre>
<h4><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a> 黑客</h4>
<pre>import sys
@tailcall
def fact(x, acc=1):
    if x: return fact(x.__sub__(1), acc.__mul__(x))
    return acc
sys.stdout.write(str(fact(6)) + '\n')</pre>
<h4>专家级程序员</h4>
<pre>import c_math
fact = c_math.fact
print fact(6)</pre>
<h4>英语系的专家级程序员</h4>
<pre>import c_maths
fact = c_maths.fact
print fact(6)</pre>
<h4>Web 设计者</h4>
<pre>def factorial(x):
    #-------------------------------------------------
    #--- Code snippet from The Math Vault          ---
    #--- Calculate factorial (C) Arthur Smith 1999 ---
    #-------------------------------------------------
    result = str(1)
    i = 1 #Thanks Adam
    while i &lt;= x:
        #result = result * i  #It's faster to use *=
        #result = str(result * result + i)
           #result = int(result *= i) #??????
        result str(int(result) * i)
        #result = int(str(result) * i)
        i = i + 1
    return result
print factorial(6)</pre>
<h4>Unix 程序员</h4>
<pre>import os
def fact(x):
    os.system('factorial ' + str(x))
fact(6)</pre>
<h4>Windows 程序员</h4>
<pre>NULL = None
def CalculateAndPrintFactorialEx(dwNumber,
                                 hOutputDevice,
                                 lpLparam,
                                 lpWparam,
                                 lpsscSecurity,
                                 *dwReserved):
    if lpsscSecurity != NULL:
        return NULL #Not implemented
    dwResult = dwCounter = 1
    while dwCounter &lt;= dwNumber:
        dwResult *= dwCounter
        dwCounter += 1
    hOutputDevice.write(str(dwResult))
    hOutputDevice.write('\n')
    return 1
import sys
CalculateAndPrintFactorialEx(6, sys.stdout, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)</pre>
<h4>公司里的程序员</h4>
<pre>def new(cls, *args, **kwargs):
    return cls(*args, **kwargs)

class Number(object):
    pass

class IntegralNumber(int, Number):
    def toInt(self):
        return new (int, self)

class InternalBase(object):
    def __init__(self, base):
        self.base = base.toInt()

    def getBase(self):
        return new (IntegralNumber, self.base)

class MathematicsSystem(object):
    def __init__(self, ibase):
        Abstract

    @classmethod
    def getInstance(cls, ibase):
        try:
            cls.__instance
        except AttributeError:
            cls.__instance = new (cls, ibase)
        return cls.__instance

class StandardMathematicsSystem(MathematicsSystem):
    def __init__(self, ibase):
        if ibase.getBase() != new (IntegralNumber, 2):
            raise NotImplementedError
        self.base = ibase.getBase()

    def calculateFactorial(self, target):
        result = new (IntegralNumber, 1)
        i = new (IntegralNumber, 2)
        while i &lt;= target:
            result = result * i
            i = i + new (IntegralNumber, 1)
        return result

print StandardMathematicsSystem.getInstance(new (InternalBase, new (IntegralNumber, 2))).calculateFactorial(new (IntegralNumber, 6))</pre>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2010. |
<a href="http://www.iwanna.cn/archives/2010/06/04/3681/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2010/06/04/3681/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2010/06/04/3681/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2010/06/04/3681/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2010/06/04/3681/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/topics/develope/python/" title="Python" rel="tag nofollow">Python</a>, <a href="http://www.iwanna.cn/tags/python/" title="Python" rel="tag nofollow">Python</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2010/06/11/3900/" title="国外PHP开发者放弃PHP而改用Python (2010年06月11日)">国外PHP开发者放弃PHP而改用Python</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/13/4513/" title="一个显示排序过程的Python脚本 (2010年07月13日)">一个显示排序过程的Python脚本</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/05/02/2904/" title="QCon北京报道：豆瓣首席架构师洪强宁谈Python语言 (2010年05月2日)">QCon北京报道：豆瓣首席架构师洪强宁谈Python语言</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/17/479/" title="Python语言入门 (2009年04月17日)">Python语言入门</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/04/3670/" title="python中的编码 (2010年06月4日)">python中的编码</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/" title="Python 语言快速入门教学 (2010年06月24日)">Python 语言快速入门教学</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/05/06/959/" title="Python 3 系列教程 &#8211; developerWorks 中国 (2009年05月6日)">Python 3 系列教程 &#8211; developerWorks 中国</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/11/17/2385/" title="Google将限制Python语言的应用 开发社区热议 (2009年11月17日)">Google将限制Python语言的应用 开发社区热议</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/02/03/2483/" title="10个免费开源微博客程序 (2010年02月3日)">10个免费开源微博客程序</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2010/06/04/3681/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>python中的编码</title>
		<link>http://www.iwanna.cn/archives/2010/06/04/3670/</link>
		<comments>http://www.iwanna.cn/archives/2010/06/04/3670/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 16:11:36 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=3670</guid>
		<description><![CDATA[在一些python讨论版里，经常会见到一些“月经帖”，类似于“我用python读取一个文件乱码”，然后就会抱怨python的编码很麻烦，其 实不是python编码难搞定，而是没有真正理解python的编码。
如在windows环境下的以下示例代码：
#!/usr/bin/env python
import sys
import os
def do():
    f = open('./ansi.txt')
    for a in [x.strip() for x in f]:
        print a
if __name__=='__main__':
    do()

此时的ansi.txt编码为ansi,我们在cmd窗口执行，看到如下结果：


此时一切正常，但，如果还是用上面的脚本去读取utf8.txt，文件是utf8编码，就会得到下面的结果：

经典的“乱码”出现了，有朋友可能会说了，我在python脚本里指定编码应该就解决了，于是：
#!/usr/bin/env python
#coding=utf-8     #在这里指定编码
import sys
import os

def do():

    f = open('./utf8.txt')
    [...]]]></description>
			<content:encoded><![CDATA[<p>在一些<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>讨论版里，经常会见到一些“月经帖”，类似于“我用<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>读取一个文件乱码”，然后就会抱怨<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>的编码很麻烦，其 实不是<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>编码难搞定，而是没有真正理解<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>的编码。</p>
<p>如在windows环境下的以下示例代码：</p>
<pre>#!/usr/bin/env <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>
import sys
import os
def do():
    f = open('./ansi.txt')
    for a in [x.strip() for x in f]:
        print a
if __name__=='__main__':
    do()
</pre>
<p>此时的ansi.txt编码为ansi,我们在cmd窗口执行，看到如下结果：</p>
<p><a href="http://images.uheed.com/iwanna/2010/06/04/00034.png" target="_blank"><img title="00034" src="http://images.uheed.com/iwanna/2010/06/04/00034.png" alt="" width="387" height="217" /></a><br />
<span id="more-3670"></span><br />
此时一切正常，但，如果还是用上面的脚本去读取utf8.txt，文件是utf8编码，就会得到下面的结果：</p>
<p><a href="http://images.uheed.com/iwanna/2010/06/04/00035.png" target="_blank"><img title="00035" src="http://images.uheed.com/iwanna/2010/06/04/00035.png" alt="" width="493" height="249" /></a></p>
<p>经典的“乱码”出现了，有朋友可能会说了，我在<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>脚本里指定编码应该就解决了，于是：</p>
<pre>#!/usr/bin/env <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>
#coding=utf-8     #在这里指定编码
import sys
import os

def do():

    f = open('./utf8.txt')
    for a in [x.strip() for x in f]:
        print a
if __name__=='__main__':
    do()
</pre>
<p>再次运行：</p>
<p><a href="http://images.uheed.com/iwanna/2010/06/04/00036.png" target="_blank"><img title="00036" src="http://images.uheed.com/iwanna/2010/06/04/00036.png" alt="" width="328" height="196" /></a></p>
<p>OMG，还是乱码。。。。</p>
<p>能不能正常输出中文不取决于#coding=utf-8，也不取决于目标文件的编码，而是取决于你的终端输出设备，这里就是CMD窗口，CMD窗口 是不支持UTF-8的，它只支持GBK，所以，我们要转码。</p>
<p>那为什么第一个示例中，它能正确输出？因为目标文件本身就是GBK编码，所以不需要做任何转码就能正常输出。</p>
<p>在第二个示例中，我们只需要做一个小的改动，就可输出UTF8编码的文件：</p>
<pre>#!/usr/bin/env <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>
#coding=utf-8
import sys
import os

def do():

    f = open('./utf8.txt')
    for a in [x.strip() for x in f]:
        print a.decode('UTF-8').encode('GBK')      #在这里转码
if __name__=='__main__':
    do()
</pre>
<p>结果：</p>
<p><a href="http://images.uheed.com/iwanna/2010/06/04/00037.png" target="_blank"><img title="00037" src="http://images.uheed.com/iwanna/2010/06/04/00037.png" alt="" width="319" height="211" /></a></p>
<p>正常输出。</p>
<p>做一个小结：</p>
<ol>
<li><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>脚本中的#coding=utf-8并不是决定最终输出的编码，而是指定<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">python</a>脚本本身使用的编码；如果你的脚本本身内部有非 ASCII码，那就应该指定编码#coding=gbk</li>
<li>如果文件的编码是GBK，你操作的终端也是支持GBK的，那就不需要编码，直接输出即可。</li>
<li>如果文件的编码不是GBK，但你的操作终端只支持GBK，不支持UTF-8，那么，你就需要对这些字符做转码操作。如文件编码是UTF-8，就需 要先decode成UNICODE编码再encode成GBK</li>
</ol>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2010. |
<a href="http://www.iwanna.cn/archives/2010/06/04/3670/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2010/06/04/3670/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2010/06/04/3670/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2010/06/04/3670/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2010/06/04/3670/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/topics/develope/python/" title="Python" rel="tag nofollow">Python</a>, <a href="http://www.iwanna.cn/tags/python/" title="Python" rel="tag nofollow">Python</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2010/06/11/3900/" title="国外PHP开发者放弃PHP而改用Python (2010年06月11日)">国外PHP开发者放弃PHP而改用Python</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/13/4513/" title="一个显示排序过程的Python脚本 (2010年07月13日)">一个显示排序过程的Python脚本</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/05/02/2904/" title="QCon北京报道：豆瓣首席架构师洪强宁谈Python语言 (2010年05月2日)">QCon北京报道：豆瓣首席架构师洪强宁谈Python语言</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/17/479/" title="Python语言入门 (2009年04月17日)">Python语言入门</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/04/3681/" title="Python程序员的进化 (2010年06月4日)">Python程序员的进化</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/" title="Python 语言快速入门教学 (2010年06月24日)">Python 语言快速入门教学</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/05/06/959/" title="Python 3 系列教程 &#8211; developerWorks 中国 (2009年05月6日)">Python 3 系列教程 &#8211; developerWorks 中国</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/11/17/2385/" title="Google将限制Python语言的应用 开发社区热议 (2009年11月17日)">Google将限制Python语言的应用 开发社区热议</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/02/03/2483/" title="10个免费开源微博客程序 (2010年02月3日)">10个免费开源微博客程序</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2010/06/04/3670/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QCon北京报道：豆瓣首席架构师洪强宁谈Python语言</title>
		<link>http://www.iwanna.cn/archives/2010/05/02/2904/</link>
		<comments>http://www.iwanna.cn/archives/2010/05/02/2904/#comments</comments>
		<pubDate>Sat, 01 May 2010 16:01:32 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=2904</guid>
		<description><![CDATA[在4月23日至25日召开的QCon Beijing 2010大会上，来自豆瓣网的洪强宁为与会开发者分享了Python语言用于Web 2.0网站开发的经验。豆瓣网从开发初期，便选用Python作为主要的网站构建语言，同时Python也是目前豆瓣网使用最广泛，基础最深厚的语言。作为豆瓣网首席架构师，洪强宁和他带领的技术团队在网站开发过程中，在Python语言使用方面积累了大量经验，同时在网站架构、性能、可伸缩性方面进行了深入研究。

在QCon大会期间，InfoQ中文站编辑就Python语言本身的特性，Python在Web 2.0站点开发中的适用性，以及豆瓣网的BeansDB开源项目等内容，对洪强宁进行了访谈。就Python语言在Web 2.0网站开发方面的生产率，洪强宁谈到：
Python语法简明，具备很强的易用性，能够帮助开发团队以最为高效率的速度完成工作任务。对于刚开始使用Python工作的程序员，完成Hello World例子不会超过1分钟，学习编写文本处理工具用一个下午的时间即可，而完成一个实用程序的编写，即便是新手，也仅需要一周的时间。
我在2002年开始接触Python，从2004年到现在基本完全使用Python进行工作。Python语言在降低工作成本方面有着显著的效果，同时，由于Python语言存在如强制缩进这样的约定，能够在一定程度上避免程序员编写代码的个人风格化，以保证代码始终具备良好的可读性。目前，豆瓣网目前约有近六成的代码是使用Python语言编写，另外不到三成使用C语言，其次是JavaScript代码，还有少量代码使用 C++，Erlang，Go，Pyrex，R以及Shell编写。
在QCon演讲中，洪强宁和观众分享了Python语言的特点及优势，并结合豆瓣开发过程中的多个实际案例，阐述Python如何做到简化常见的开发场景，并使豆瓣网能够充分适应Web 2.0时代所带来的快速变化。就Python语言的适用范围，洪强宁谈到：
Python 具有非常宽广的适用面，对于Web 2.0网站来说，从Web应用开发到离线计算，从运维脚本到数据分析，都能够使用Python来完成。同时Python具有非常丰富的资源，其标准库所包含的内置模块超过200个，Pyhton的包索引PyPI中包含接近一万个Packages，面向的领域包含网络处理、数据库、桌面开发、游戏、科学计算、安全、文本处理等在内的各个层面，同时语言本身具备很好的拓展性，能够在Python脚本中调用c/c++的库，对语言功能进行扩充。
对于Web开发来说，Python有着众多的框架，往往让刚开始上手的开发者难以选择。对与网站Web开发框架的选择，洪强宁谈到：
由于Python社区的历史问题，积累了众多Python语言实现的Web开发框架，如Django、TurboGears、Quixote等，这些Web 开发框架各有自己独到的优势，同时也各自吸引了一批坚定的开发者为其不断添砖加瓦，从某种程度上，削弱了Python社区的凝聚力。相对于Ruby社区，几乎所有的Web开发都使用Ruby on Rails完成，凝聚了开发者的力量。但Python不乏功能强大的基础框架，在Python语言实现的WSGI（Web服务网关接口）帮助下，开发人员甚至可以在数小时之内编码实现一个自己的Web框架，来完成最大自主程度的Web开发工作。
近期豆瓣网将基于Dynamo简化开发的BeansDB贡献给开源社区。BeansDB提供高可用性的分布式KeyValue存储系统，采用HashTree和简化的版本号来快速同步保证最终一致性。就BeansDB的技术实现和应用场景，洪强宁谈到：
BeansDB采用类似Memcached的去中心化结构，在客户端实现数据路由。目前提供了Python版本的客户端，其它语言的客户端可以由Memcached的客户端改造得到。同时提供BeansDB状态查看，以及各个节点的数据分布和同步进度查询功能。BeansDB的典型应用体现在图片文件、小媒体文件、大文本字段等多媒体数据的存储。BeansDB的易用性和高可用性体现在部分节点出现故障时不影响数据服务的正常访问，同时通过哈希树实现快速完整数据同步。
豆瓣网以多年Python开发的实践经验，为Python语言在国内Web 2.0站点开发中的应用给出了最佳成功案例，也吸引了一批Web 2.0站点的开发者将Python列为首选语言。期待明年的QCon大会，来自豆瓣网的工程师能够为开发者分享更有价值的开发经验。

© 我想网 Akon 所有 , 2010. &#124;
永久链接 &#124;
1条评论 &#124;
提交到
Google Reader
鲜果
抓虾


	标签：Python, Python

	您可能会感兴趣的其他文章
	
	国外PHP开发者放弃PHP而改用Python 
	一个显示排序过程的Python脚本 
	Python语言入门 
	Python程序员的进化 
	python中的编码 
	Python 语言快速入门教学 
	Python 3 系列教程 &#8211; developerWorks 中国 
	Google将限制Python语言的应用 开发社区热议 
	10个免费开源微博客程序 



Feed enhanced by Better Feed from  Ozh
]]></description>
			<content:encoded><![CDATA[<p>在4月23日至25日召开的<a href="http://www.qconbeijing.com/index.html">QCon Beijing 2010大会</a>上，来自<a id="lpna" title="豆瓣网" name="ssm1" href="http://www.douban.com/">豆瓣网</a>的洪强宁为与会开发者分享了<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>语言用于Web 2.0网站开发的经验。豆瓣网从开发初期，便选用<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>作为主要的网站构建语言，同时<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>也是目前豆瓣网使用最广泛，基础最深厚的语言。作为豆瓣网首席架构师，洪强宁和他带领的技术团队在网站开发过程中，在<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>语言使用方面积累了大量经验，同时在网站架构、性能、可伸缩性方面进行了深入研究。<br />
<span id="more-2904"></span><br />
在QCon大会期间，InfoQ中文站编辑就<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>语言本身的特性，<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>在Web 2.0站点开发中的适用性，以及豆瓣网的BeansDB开源项目等内容，对洪强宁进行了访谈。就<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>语言在Web 2.0网站开发方面的生产率，洪强宁谈到：</p>
<blockquote id="cgkk"><p><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>语法简明，具备很强的易用性，能够帮助开发团队以最为高效率的速度完成工作任务。对于刚开始使用<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>工作的程序员，完成Hello World例子不会超过1分钟，学习编写文本处理工具用一个下午的时间即可，而完成一个实用程序的编写，即便是新手，也仅需要一周的时间。</p>
<p>我在2002年开始接触<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>，从2004年到现在基本完全使用<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>进行工作。<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>语言在降低工作成本方面有着显著的效果，同时，由于<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>语言存在如强制缩进这样的约定，能够在一定程度上避免程序员编写代码的个人风格化，以保证代码始终具备良好的可读性。目前，豆瓣网目前约有近六成的代码是使用<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>语言编写，另外不到三成使用C语言，其次是JavaScript代码，还有少量代码使用 C++，Erlang，Go，Pyrex，R以及Shell编写。</p></blockquote>
<p>在QCon演讲中，洪强宁和观众分享了<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>语言的特点及优势，并结合豆瓣开发过程中的多个实际案例，阐述<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>如何做到简化常见的开发场景，并使豆瓣网能够充分适应Web 2.0时代所带来的快速变化。就<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>语言的适用范围，洪强宁谈到：</p>
<blockquote id="ydw0"><p><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a> 具有非常宽广的适用面，对于Web 2.0网站来说，从Web应用开发到离线计算，从运维脚本到数据分析，都能够使用<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>来完成。同时<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>具有非常丰富的资源，其标准库所包含的内置模块超过200个，Pyhton的包索引PyPI中包含接近一万个Packages，面向的领域包含网络处理、数据库、桌面开发、游戏、科学计算、安全、文本处理等在内的各个层面，同时语言本身具备很好的拓展性，能够在<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>脚本中调用c/c++的库，对语言功能进行扩充。</p></blockquote>
<p>对于Web开发来说，<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>有着众多的框架，往往让刚开始上手的开发者难以选择。对与网站Web开发框架的选择，洪强宁谈到：</p>
<blockquote id="xmf."><p>由于<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>社区的历史问题，积累了众多<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>语言实现的Web开发框架，如Django、TurboGears、Quixote等，这些Web 开发框架各有自己独到的优势，同时也各自吸引了一批坚定的开发者为其不断添砖加瓦，从某种程度上，削弱了<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>社区的凝聚力。相对于Ruby社区，几乎所有的Web开发都使用Ruby on Rails完成，凝聚了开发者的力量。但<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>不乏功能强大的基础框架，在<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>语言实现的WSGI（Web服务网关接口）帮助下，开发人员甚至可以在数小时之内编码实现一个自己的Web框架，来完成最大自主程度的Web开发工作。</p></blockquote>
<p>近期豆瓣网将基于Dynamo简化开发的<a id="rucy" title="BeansDB" href="http://code.google.com/p/beansdb/">BeansDB</a>贡献给开源社区。<a id="简介" name="简介"></a>BeansDB提供高可用性的分布式KeyValue存储系统，采用HashTree和简化的版本号来快速同步保证最终一致性。就<a id="简介" name="简介"></a>BeansDB<a id="简介" name="简介"></a>的技术实现和应用场景，洪强宁谈到：</p>
<blockquote id="y-3l"><p>BeansDB采用类似Memcached的去中心化结构，在客户端实现数据路由。目前提供了<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>版本的客户端，其它语言的客户端可以由Memcached的客户端改造得到。同时提供BeansDB状态查看，以及各个节点的数据分布和同步进度查询功能。BeansDB的典型应用体现在图片文件、小媒体文件、大文本字段等多媒体数据的存储。BeansDB的易用性和高可用性体现在部分节点出现故障时不影响数据服务的正常访问，同时通过哈希树实现快速完整数据同步。<a id="简介" name="简介"></a></p></blockquote>
<p><a id="简介" name="简介"></a>豆瓣网以多年<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>开发的实践经验，为<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>语言在国内Web 2.0站点开发中的应用给出了最佳成功案例，也吸引了一批Web 2.0站点的开发者将<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>列为首选语言。期待明年的QCon大会，来自豆瓣网的工程师能够为开发者分享更有价值的开发经验。</p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2010. |
<a href="http://www.iwanna.cn/archives/2010/05/02/2904/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2010/05/02/2904/#comments">1条评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2010/05/02/2904/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2010/05/02/2904/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2010/05/02/2904/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/topics/develope/python/" title="Python" rel="tag nofollow">Python</a>, <a href="http://www.iwanna.cn/tags/python/" title="Python" rel="tag nofollow">Python</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2010/06/11/3900/" title="国外PHP开发者放弃PHP而改用Python (2010年06月11日)">国外PHP开发者放弃PHP而改用Python</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/13/4513/" title="一个显示排序过程的Python脚本 (2010年07月13日)">一个显示排序过程的Python脚本</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/17/479/" title="Python语言入门 (2009年04月17日)">Python语言入门</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/04/3681/" title="Python程序员的进化 (2010年06月4日)">Python程序员的进化</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/04/3670/" title="python中的编码 (2010年06月4日)">python中的编码</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/" title="Python 语言快速入门教学 (2010年06月24日)">Python 语言快速入门教学</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/05/06/959/" title="Python 3 系列教程 &#8211; developerWorks 中国 (2009年05月6日)">Python 3 系列教程 &#8211; developerWorks 中国</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/11/17/2385/" title="Google将限制Python语言的应用 开发社区热议 (2009年11月17日)">Google将限制Python语言的应用 开发社区热议</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/02/03/2483/" title="10个免费开源微博客程序 (2010年02月3日)">10个免费开源微博客程序</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2010/05/02/2904/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>10个免费开源微博客程序</title>
		<link>http://www.iwanna.cn/archives/2010/02/03/2483/</link>
		<comments>http://www.iwanna.cn/archives/2010/02/03/2483/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 06:59:22 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[程序开发]]></category>
		<category><![CDATA[程序源码]]></category>
		<category><![CDATA[Source-code]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=2483</guid>
		<description><![CDATA[随着Twitter的红火以及新浪微博的流行，微博客已经渐渐取代了博客和SNS，成为最流行的互联网应用之一。前 不久康盛创想又对外开放了康盛微博CTT Beta版，使的很多站长都想搭建一个微博平台，而康盛微博程序提供下载还需要一段时间，所以 在这里我整理了10个免费微博开源程序。

1、Jaiku
Jaiku是一个基于Python的微博客平台，2007年被Google收购，不过之后并没有对其成功运营，只好在2009年宣布对其停止维护， 稍后Google就将Jaiku完全开源，并切换到AppEngine上运行，目前Jaiku完全开源并提供用户免费下载，大家可以到Jaiku源代码项 目地址。
查 看演示 代码下 载
2、Laconica / StatusNet
Laconica /  StatusNet是一个基于PHP和MySQL的开源微型博客系统，也是一个Twitter克隆，可以实现Microblog的常用功能，国外不少微博 客系统都是通过这个开源系统架设的。Laconica得到大量应用系统的支持，包括Twitterfeed、Hellotxt和Gravity等，成熟且 稳定。
最 新版本代码下载 StatusNet官方网址
3、Sweetter
Sweetter是一个开源的微博客项目，具有一定的投票机制，基于Python。
查 看演示 代码下载
4、Jisko
Jisko的界面和Twitter很像，能够自动通过AJAX更新，也是基于PHP和MySQL的，这个系统可能是西班牙人开发的，使用SVN到这 里下载其源代码。
查看演示 代 码下载
5、Yonkly
Yonkly是基于Asp.Net的开源微博客，除了开放源码的版本，它还有一个用于托管的高级独立版本。
6、PageCookery
是国内的一款开源代码，也是基于PHP和MySQL，支持和叽歪的同步，大家可以到PageCookery主站去下载代 码。
7、Asaph
也是一款PHP+Mysql的，其下载代码下载地址：http://www.phoboslab.org/projects/asaph
8、Floopo
Floopo是基于PHP和MySQL的免费的微博客系统，它的功能非常类似Twitter，并且提供了强大的后台管理系统。
9、TypePad Motion
TypePad  Motion是一个多媒体微博客，除了文字内容，您还可以分享图片（GIF/JPE/PNG）、视频（YouTube/Vimeo）和音频（MP3），附 属媒体文件均可以在线播放。
TypePad Motion基于TypePad的API，不论任人通过TypePad  Motion架设的网站，其数据都是统一存贮在TypePad的数据库。
软件主页： http://www.typepad.com/go/motion/
下载地址： http://developer.typepad.com/motion/create-motion.html
10、Sharetronix
Sharetronix是一款基于PHP和MySQL的免费的微博客系统。
查看演示 代 码下载

© 我想网 Akon 所有 , 2010. &#124;
永久链接 &#124;
没有评论 &#124;
提交到
Google Reader
鲜果
抓虾


	标签：PHP, PHP, Python, Python, Source-code, Website, Website, 程序开发, 程序源码

	您可能会感兴趣的其他文章
	
	国外十大开源的PHP应用服务 
	国外PHP开发者放弃PHP而改用Python 
	国内开源的PHP应用程序 
	PHP获取字符串编码类型 [...]]]></description>
			<content:encoded><![CDATA[<p>随着Twitter的红火以及新浪微博的流行，微博客已经渐渐取代了博客和SNS，成为最流行的互联网应用之一。前 不久康盛创想又对外开放了康盛微博CTT Beta版，使的很多站长都想搭建一个微博平台，而康盛微博程序提供下载还需要一段时间，所以 在这里我整理了10个免费微博开源程序。<br />
<span id="more-2483"></span><br />
1、Jaiku</p>
<p>Jaiku是一个基于<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的微博客平台，2007年被Google收购，不过之后并没有对其成功运营，只好在2009年宣布对其停止维护， 稍后Google就将Jaiku完全开源，并切换到AppEngine上运行，目前Jaiku完全开源并提供用户免费下载，大家可以到Jaiku源代码项 目地址。</p>
<p><a title="jaiku" href="http://www.jaiku.com/" target="_blank"><strong>查 看演示</strong></a> <a title="jaiku代码下载" href="http://code.google.com/p/jaikuengine/" target="_blank"><strong>代码下 载</strong></a></p>
<p>2、Laconica / StatusNet</p>
<p>Laconica /  StatusNet是一个基于<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>和MySQL的开源微型博客系统，也是一个Twitter克隆，可以实现Microblog的常用功能，国外不少微博 客系统都是通过这个开源系统架设的。Laconica得到大量应用系统的支持，包括Twitterfeed、Hellotxt和Gravity等，成熟且 稳定。</p>
<p><a href="http://status.net/statusnet-0.8.2.tar.gz" target="_blank"><strong>最 新版本代码下载</strong></a> <a title="statusnet" href="http://status.net/" target="_blank"><strong>StatusNet官方网址</strong></a></p>
<p>3、Sweetter</p>
<p>Sweetter是一个开源的微博客项目，具有一定的投票机制，基于<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>。</p>
<p><a title="sweetter" href="http://sweetter.net/" target="_blank"><strong>查 看演示</strong></a> <a title="sweetter下载" href="https://launchpad.net/sweetter" target="_blank"><strong>代码下载</strong></a></p>
<p>4、Jisko</p>
<p>Jisko的界面和Twitter很像，能够自动通过AJAX更新，也是基于<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>和MySQL的，这个系统可能是西班牙人开发的，使用SVN到这 里下载其源代码。</p>
<p><a title="jisko" href="http://jisko.net/public?page-4" target="_blank"><strong>查看演示</strong></a><strong> </strong><a title="jisko下载" href="http://dev.jisko.org/v2" target="_blank"><strong>代 码下载</strong></a></p>
<p>5、<a href="http://yonkly.codeplex.com/" target="_blank">Yonkly</a></p>
<p>Yonkly是基于Asp.Net的开源微博客，除了开放源码的版本，它还有一个用于托管的高级独立版本。</p>
<p>6、PageCookery</p>
<p>是国内的一款开源代码，也是基于<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>和MySQL，支持和叽歪的同步，大家可以到<a title="pagecookery" href="http://www.pagecookery.com/" target="_blank">PageCookery主站</a>去下载代 码。</p>
<p>7、Asaph</p>
<p>也是一款<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>+Mysql的，其下载代码下载地址：<a href="http://www.phoboslab.org/projects/asaph" target="_blank">http://www.phoboslab.org/projects/asaph</a></p>
<p>8、<a href="http://www.floopo.com/" target="_blank">Floopo</a></p>
<p>Floopo是基于<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>和MySQL的免费的微博客系统，它的功能非常类似Twitter，并且提供了强大的后台管理系统。</p>
<p>9、TypePad Motion</p>
<p>TypePad  Motion是一个多媒体微博客，除了文字内容，您还可以分享图片（GIF/JPE/PNG）、视频（YouTube/Vimeo）和音频（MP3），附 属媒体文件均可以在线播放。</p>
<p>TypePad Motion基于TypePad的API，不论任人通过TypePad  Motion架设的网站，其数据都是统一存贮在TypePad的数据库。</p>
<p>软件主页： <a href="http://www.typepad.com/go/motion/" target="_blank">http://www.typepad.com/go/motion/</a><br />
下载地址： <a href="http://developer.typepad.com/motion/create-motion.html" target="_blank">http://developer.typepad.com/motion/create-motion.html</a></p>
<p>10、Sharetronix</p>
<p>Sharetronix是一款基于<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>和MySQL的免费的微博客系统。</p>
<p><a title="sharetronix" href="http://demo.sharetronix.net/" target="_blank"><strong>查看演示</strong></a> <a title="sharetronix下载" href="http://sharetronix.com/opensource/download" target="_blank"><strong>代 码下载</strong></a></p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2010. |
<a href="http://www.iwanna.cn/archives/2010/02/03/2483/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2010/02/03/2483/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2010/02/03/2483/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2010/02/03/2483/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2010/02/03/2483/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/topics/develope/php/" title="PHP" rel="tag nofollow">PHP</a>, <a href="http://www.iwanna.cn/tags/php/" title="PHP" rel="tag nofollow">PHP</a>, <a href="http://www.iwanna.cn/topics/develope/python/" title="Python" rel="tag nofollow">Python</a>, <a href="http://www.iwanna.cn/tags/python/" title="Python" rel="tag nofollow">Python</a>, <a href="http://www.iwanna.cn/tags/source-code/" title="Source-code" rel="tag nofollow">Source-code</a>, <a href="http://www.iwanna.cn/topics/surf/website/" title="Website" rel="tag nofollow">Website</a>, <a href="http://www.iwanna.cn/tags/website/" title="Website" rel="tag nofollow">Website</a>, <a href="http://www.iwanna.cn/topics/develope/" title="程序开发" rel="tag nofollow">程序开发</a>, <a href="http://www.iwanna.cn/topics/resource/" title="程序源码" rel="tag nofollow">程序源码</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2009/07/22/2049/" title="国外十大开源的PHP应用服务 (2009年07月22日)">国外十大开源的PHP应用服务</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/11/3900/" title="国外PHP开发者放弃PHP而改用Python (2010年06月11日)">国外PHP开发者放弃PHP而改用Python</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/07/22/2051/" title="国内开源的PHP应用程序 (2009年07月22日)">国内开源的PHP应用程序</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/07/21/2041/" title="PHP获取字符串编码类型 (2009年07月21日)">PHP获取字符串编码类型</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/08/3820/" title="php 加密解密类(含公钥) (2010年06月8日)">php 加密解密类(含公钥)</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/01/26/2468/" title="9个PHP库简介和下载 (2010年01月26日)">9个PHP库简介和下载</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/01/26/2470/" title="21个实用便利的PHP代码 (2010年01月26日)">21个实用便利的PHP代码</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/09/18/2254/" title="高效互联网营销的18种技巧 (2009年09月18日)">高效互联网营销的18种技巧</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/29/4248/" title="雅虎发布网站性能监测工具：从用户角度衡量 (2010年06月29日)">雅虎发布网站性能监测工具：从用户角度衡量</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/05/27/3401/" title="陈光锋[访谈]：地方新站如何做运营推广 (2010年05月27日)">陈光锋[访谈]：地方新站如何做运营推广</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2010/02/03/2483/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google将限制Python语言的应用 开发社区热议</title>
		<link>http://www.iwanna.cn/archives/2009/11/17/2385/</link>
		<comments>http://www.iwanna.cn/archives/2009/11/17/2385/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 04:10:53 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=2385</guid>
		<description><![CDATA[Collin Winter是Python社区一位颇具影响力的开发者，他曾是CPython项目的核心开发者之一、也曾是Unladen Swallow（见文末注释）的核心开发者，参与了很多Python项目的开发。近来传闻Google将在其新项目中限制Python的使用，为此有开发 者（以K表示）在Google 论坛中公开询问了Collin Winter，Collin Winter就很多尖锐的问题做了解答。这篇帖子同时也吸引了很多高质量的跟帖。

K：我听说Google将在其新项目中限制Python的使用，无疑这将大大减少Python代码和Python得到的支持。这是否确有其事还是只是谣传？
Collin Winter：的确，Google将限制Python的应用因为：Python不如Java和C++快，线程占有、内存使用都很高在使用Python开发 新系统的时候，我们深知如果负载增加了10倍或者100倍系统会怎样，开发出的服务会有多糟糕我想Python已经发展到了一个狭缝中，因此在选择时我们 应当权衡其优点和缺点，也许开发人员使用Python会很有效率，但随着系统的增大却会遇到许多平台级的性能限制。
K：Unladen Swallow会改变这一切么？你的期望是什么呢？
Collin Winter：Unladen Swallow旨在尽可能地将Python用在更多它现在尚未涉足的地方，而且Unladen Swallow也并非包治百病的灵丹妙药。如果没有人给Python注入投资，Python将仍旧比C和Java慢、占用更多的内存和线程。我希望开发者 对Python的关注能够形成一个良性循环：越多的开发者感兴趣、越多的公司干兴趣，就有越多的投资注入，从而开发出更多的Python资源。
我认为Python及其他动态语言最好的一点就是：许多开发者工作于不同的子系统，但都为同一个代码基工作。而C或者C++语言则不同，参与的开发 者越多，代码基就越支离破碎。从这个角度来说动态语言更加易于sandbox操作。这种敏捷和灵活是Python语言的重要特性。
K：Python的确是比C和Java慢，但它比较起v8 JavaScript引擎如何，是否会是后者的竞争对手呢？
Collin Winter：我认为像CPython之类的应用不可能像V8或者SquirrelFish Extreme那样快，毕竟后两者是专为速度而生的。我们也曾遇到一些高速性能方面的优化却很难配置到CPython中，因而只能放弃。作为开源项目的志 愿者，CPython跟V8的侧重点不一样：CPython强调的是简单，也即简单、稍慢的内核便于人们在业余时间维护。
对于Python的另一个项目PyPy我倒是有很高的期望，希望它能摆脱C-level向后兼容的束缚而提供长久的性能解决方案。但这个愿望可能需要十年来实现。
K：CPython为什么考虑的是人们在业余时间的维护？
Collin Winter：CPython开发人员很少是有报酬的，几乎全部是志愿者，而Ruby开发者却能够从EngineYard等赞助商那里获得基金，因而当他 们意识到MRI伺服web应用很慢时，他们可以更好地开发他们的VM。这也决定了我们开发的东西更加照顾大多数人的需求。
一位名叫Leon Sit的开发者在这里补充道：我认为当系统增大时，CPython除了在数字码方面表现不错之外其他的都差强人意。而且，CPython依赖C编辑器而 Windows系统根本没有C编辑器。为了提高CPython的速度，就需要添加打印信息而它们涉及的语法却非Python的标准语法。
K：那么Jython呢？
Collin Winter： Unladen Swallow的另一个主要目标是维护与C扩展模块的兼容性，后者被Google广泛使用。使用Jython需要将基础架构从SWIG移植到JNI，这是 一项很痛苦的工作，而且几乎会无可避免地带来非常繁琐的bug。这是我们为什么没有选择Jython作为baseline的首要原因。
Jython是一部分全职的有薪开发者。但到目前为止，IronPython和Jython不得不将大部分的开发精力放在与CPython的兼容 上，只有很少的精力放在性能优化方面。也由此可见支持Python 3多么影响Jython,IronPython, PyPy等项目。
网友Tom Machinski认为：CPython并非与低阶虚拟机（LLVM）相兼容。Unladen Swallow项目组提高五倍性能的承诺并没有真正意义上的实现。如果CPU耗用至少90%的执行时间用以运行一小段循环，CPython无疑可以将这段 程序提高100倍甚至更多。但如果是大的应用呢？而且不要忘了，这种加速往往只是针对程序的某个点，也即热点优化（hot spot optimization）。
不要误会我的意思，我当然对Unladen Swallow项目很感兴趣而且希望它能够真正地实现目标。但我也绝对认同Collin的意思：即便Unladen Swallow项目所有的目标都能真正实现，Python也不是Java或者C++的对手。
有开发者问：像Google这样的公司为什么不用Python编写一个原型，然后逐渐将核心部分转化为Cyhton，这样以来既能利用Python的优势，也可以获得C的效率和优化性能？
Craig Citro答道：我认为对Google而言这是发展Python的新计划：用Python写代码、做测试，然后将重要部分转化为CPython以提高速 度。然而这无疑是一项巨大的工作，而Collin Winter在上文中谈到的也不过是提高Python的运行速度、让Python在Google中继续保留下去。
而且目前CPython与Unladen Swallow的目标有很多矛盾之处，比如在低阶虚拟机（LLVM）方面，Unladen Swallow希望引入许多runtime优化和特性，而CPython却无法做到。
但是正如HotSpot JVM在一些标准方面可以打败g++一样，CPython击败单纯的Python代码静态编辑也不是什么难事。比如，如果你想写一个特殊的应用而你又很在 乎性能，CPython就是很棒的选择。你可以将对象转化为本地的C数据类型，如果你嫌麻烦而将Python代码转为CPython，JIT编辑器会很好 地优化这些纯Python代码。
注释： Unladen Swallow是Python的一个分支，由Google的一组开发人员组成。由于Google 在很多的应用项目中使用了Python，例如内部的服务器监控以及对外的Google Groups等。 所以Google很自然地希望提高Python的性能。该项目致力于改善Python的执行效率。Unladen Swallow的目标是将Python的性能提高五倍。为了实现该目标，将增加JIT的支持，并对虚拟机进行重新设计。在性能提升的同时，依旧会与 CPython保证源代码级别的兼容。
Unladen Swallow 的项目领导者及核心开发人员包括： [...]]]></description>
			<content:encoded><![CDATA[<p>Collin Winter是<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>社区一位颇具影响力的开发者，他曾是CPython项目的核心开发者之一、也曾是Unladen Swallow（见文末注释）的核心开发者，参与了很多<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>项目的开发。近来传闻Google将在其新项目中限制<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的使用，为此有开发 者（以K表示）在Google 论坛中公开询问了Collin Winter，Collin Winter就很多尖锐的问题做了解答。这篇帖子同时也吸引了很多高质量的跟帖。<br />
<span id="more-2385"></span><br />
<strong>K：我听说Google将在其新项目中限制<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的使用，无疑这将大大减少<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码和<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>得到的支持。这是否确有其事还是只是谣传？</strong></p>
<p>Collin Winter：的确，Google将限制<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的应用因为：<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>不如Java和C++快，线程占有、内存使用都很高在使用<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>开发 新系统的时候，我们深知如果负载增加了10倍或者100倍系统会怎样，开发出的服务会有多糟糕我想<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>已经发展到了一个狭缝中，因此在选择时我们 应当权衡其优点和缺点，也许开发人员使用<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>会很有效率，但随着系统的增大却会遇到许多平台级的性能限制。</p>
<p><strong>K：Unladen Swallow会改变这一切么？你的期望是什么呢？</strong></p>
<p>Collin Winter：Unladen Swallow旨在尽可能地将<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>用在更多它现在尚未涉足的地方，而且Unladen Swallow也并非包治百病的灵丹妙药。如果没有人给<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>注入投资，<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>将仍旧比C和Java慢、占用更多的内存和线程。我希望开发者 对<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的关注能够形成一个良性循环：越多的开发者感兴趣、越多的公司干兴趣，就有越多的投资注入，从而开发出更多的<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>资源。</p>
<p>我认为<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>及其他动态语言最好的一点就是：许多开发者工作于不同的子系统，但都为同一个代码基工作。而C或者C++语言则不同，参与的开发 者越多，代码基就越支离破碎。从这个角度来说动态语言更加易于sandbox操作。这种敏捷和灵活是<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>语言的重要特性。</p>
<p><strong>K：<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的确是比C和Java慢，但它比较起v8 JavaScript引擎如何，是否会是后者的竞争对手呢？</strong></p>
<p>Collin Winter：我认为像CPython之类的应用不可能像V8或者SquirrelFish Extreme那样快，毕竟后两者是专为速度而生的。我们也曾遇到一些高速性能方面的优化却很难配置到CPython中，因而只能放弃。作为开源项目的志 愿者，CPython跟V8的侧重点不一样：CPython强调的是简单，也即简单、稍慢的内核便于人们在业余时间维护。</p>
<p>对于<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的另一个项目PyPy我倒是有很高的期望，希望它能摆脱C-level向后兼容的束缚而提供长久的性能解决方案。但这个愿望可能需要十年来实现。</p>
<p>K：CPython为什么考虑的是人们在业余时间的维护？</p>
<p>Collin Winter：CPython开发人员很少是有报酬的，几乎全部是志愿者，而Ruby开发者却能够从EngineYard等赞助商那里获得基金，因而当他 们意识到MRI伺服web应用很慢时，他们可以更好地开发他们的VM。这也决定了我们开发的东西更加照顾大多数人的需求。</p>
<p>一位名叫Leon Sit的开发者在这里补充道：我认为当系统增大时，CPython除了在数字码方面表现不错之外其他的都差强人意。而且，CPython依赖C编辑器而 Windows系统根本没有C编辑器。为了提高CPython的速度，就需要添加打印信息而它们涉及的语法却非<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的标准语法。</p>
<p><strong>K：那么Jython呢？</strong></p>
<p>Collin Winter： Unladen Swallow的另一个主要目标是维护与C扩展模块的兼容性，后者被Google广泛使用。使用Jython需要将基础架构从SWIG移植到JNI，这是 一项很痛苦的工作，而且几乎会无可避免地带来非常繁琐的bug。这是我们为什么没有选择Jython作为baseline的首要原因。</p>
<p>Jython是一部分全职的有薪开发者。但到目前为止，IronPython和Jython不得不将大部分的开发精力放在与CPython的兼容 上，只有很少的精力放在性能优化方面。也由此可见支持<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a> 3多么影响Jython,IronPython, PyPy等项目。</p>
<p>网友Tom Machinski认为：CPython并非与低阶虚拟机（LLVM）相兼容。Unladen Swallow项目组提高五倍性能的承诺并没有真正意义上的实现。如果CPU耗用至少90%的执行时间用以运行一小段循环，CPython无疑可以将这段 程序提高100倍甚至更多。但如果是大的应用呢？而且不要忘了，这种加速往往只是针对程序的某个点，也即热点优化（hot spot optimization）。</p>
<p>不要误会我的意思，我当然对Unladen Swallow项目很感兴趣而且希望它能够真正地实现目标。但我也绝对认同Collin的意思：即便Unladen Swallow项目所有的目标都能真正实现，<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>也不是Java或者C++的对手。</p>
<p><strong>有开发者问：像Google这样的公司为什么不用<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>编写一个原型，然后逐渐将核心部分转化为Cyhton，这样以来既能利用<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的优势，也可以获得C的效率和优化性能？</strong></p>
<p>Craig Citro答道：我认为对Google而言这是发展<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的新计划：用<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>写代码、做测试，然后将重要部分转化为CPython以提高速 度。然而这无疑是一项巨大的工作，而Collin Winter在上文中谈到的也不过是提高<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的运行速度、让<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>在Google中继续保留下去。</p>
<p>而且目前CPython与Unladen Swallow的目标有很多矛盾之处，比如在低阶虚拟机（LLVM）方面，Unladen Swallow希望引入许多runtime优化和特性，而CPython却无法做到。</p>
<p>但是正如HotSpot JVM在一些标准方面可以打败g++一样，CPython击败单纯的<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码静态编辑也不是什么难事。比如，如果你想写一个特殊的应用而你又很在 乎性能，CPython就是很棒的选择。你可以将对象转化为本地的C数据类型，如果你嫌麻烦而将<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码转为CPython，JIT编辑器会很好 地优化这些纯<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码。</p>
<p><strong>注释</strong>： Unladen Swallow是<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的一个分支，由Google的一组开发人员组成。由于Google 在很多的应用项目中使用了<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>，例如内部的服务器监控以及对外的Google Groups等。 所以Google很自然地希望提高<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的性能。该项目致力于改善<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的执行效率。Unladen Swallow的目标是将<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的性能提高五倍。为了实现该目标，将增加JIT的支持，并对虚拟机进行重新设计。在性能提升的同时，依旧会与 CPython保证源代码级别的兼容。</p>
<p>Unladen Swallow 的项目领导者及核心开发人员包括： Collin Winter、Jeffrey Yasskin、Thomas Wouters ，均为长期从事 CPython 的核心开发人员。他们贡献自己的20%的自由工作时间给Unladen Swallow。但是这个组织坚持认为这是一个<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>项目，而非Google所有。</p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2009. |
<a href="http://www.iwanna.cn/archives/2009/11/17/2385/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2009/11/17/2385/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2009/11/17/2385/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2009/11/17/2385/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2009/11/17/2385/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/topics/develope/python/" title="Python" rel="tag nofollow">Python</a>, <a href="http://www.iwanna.cn/tags/python/" title="Python" rel="tag nofollow">Python</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2010/06/11/3900/" title="国外PHP开发者放弃PHP而改用Python (2010年06月11日)">国外PHP开发者放弃PHP而改用Python</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/13/4513/" title="一个显示排序过程的Python脚本 (2010年07月13日)">一个显示排序过程的Python脚本</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/05/02/2904/" title="QCon北京报道：豆瓣首席架构师洪强宁谈Python语言 (2010年05月2日)">QCon北京报道：豆瓣首席架构师洪强宁谈Python语言</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/17/479/" title="Python语言入门 (2009年04月17日)">Python语言入门</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/04/3681/" title="Python程序员的进化 (2010年06月4日)">Python程序员的进化</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/04/3670/" title="python中的编码 (2010年06月4日)">python中的编码</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/" title="Python 语言快速入门教学 (2010年06月24日)">Python 语言快速入门教学</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/05/06/959/" title="Python 3 系列教程 &#8211; developerWorks 中国 (2009年05月6日)">Python 3 系列教程 &#8211; developerWorks 中国</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/02/03/2483/" title="10个免费开源微博客程序 (2010年02月3日)">10个免费开源微博客程序</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2009/11/17/2385/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>6个免费开源微博客程序概览</title>
		<link>http://www.iwanna.cn/archives/2009/08/08/2110/</link>
		<comments>http://www.iwanna.cn/archives/2009/08/08/2110/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 02:32:04 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[程序开发]]></category>
		<category><![CDATA[OpenSource]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=2110</guid>
		<description><![CDATA[以Twitter为代表的微博客是今年非常火的社交网络，在国内的发展也在上半年一度非常迅猛，虽然现在大多数微博客都因为种种原因无法访问， 但这并没有降低人们对微博客的热情，实际上，自己动手搭建一个类似Twitter的微博客平台并不困难，这里我就介绍一些常见的开源微博客程序，有了这些 开源代码，只要稍懂一些电脑知识，就可以在短时间内搭建一个类似饭否或Twitter的微博客平台。

Jaiku
Jaiku（演示地址）是一个基于Python的微博客平台，2007年被Google收购，不过之后并没有对其成功运营，只好在2009年宣布对其停止维护，稍后Google就将Jaiku完全开源，并切换到AppEngine上运行，目前Jaiku完全开源并提供用户免费下载，大家可以到Jaiku源代码项目地址，使用一个SVN工具下载其源代码。
Laconica
Laconica（演示地址） 是一个基于PHP和MySQL的开源微型博客系统，也是一个Twitter克隆，可以实现Microblog的常用功能，国外不少微博客系统都是通过这个 开源系统架设的。Laconica得到大量应用系统的支持，包括Twitterfeed、Hellotxt和Gravity等。点这里下载其源代码。
Sweetter
Sweetter是一个开源的微博客项目，具有一定的投票机制，基于Python，点这里可下载其源程序代码。
Jisko
Jisko的界面和Twitter很像，能够自动通过AJAX更新，也是基于PHP和MySQL的，这个系统可能是西班牙人开发的，使用SVN到这里下载其源代码。
最后介绍两个国内中文的开源微博客系统。
EasyTalk
界面挺像饭否的，API接口也和饭否类似，基于PHP和MySQL，点这里下载源代码。
PageCookery
也是基于PHP和MySQL，支持和叽歪的同步，点这里下载源代码。
好了，以上就是我介绍的一些免费开源微博客系统，通过这些程序，我们可以搭建一个自己的饭否或Twitter，是不是很酷啊。如果大家知道什么更好的开源系统，请留言和大家分享。

© 我想网 Akon 所有 , 2009. &#124;
永久链接 &#124;
1条评论 &#124;
提交到
Google Reader
鲜果
抓虾


	标签：OpenSource, PHP, Python, 程序开发

	您可能会感兴趣的其他文章
	
	网页鼠标点击轨迹热图跟踪软件-ClickHeat 
	游戏开发者必需知道的5个开源游戏引擎 
	开源射击游戏Warsow 0.5版发布 
	50个非常出色的开源博客 
	50款流行安全软件的开源替代品 



Feed enhanced by Better Feed from  Ozh
]]></description>
			<content:encoded><![CDATA[<p>以Twitter为代表的微博客是今年非常火的社交网络，在国内的发展也在上半年一度非常迅猛，虽然现在大多数微博客都因为种种原因无法访问， 但这并没有降低人们对微博客的热情，实际上，自己动手搭建一个类似Twitter的微博客平台并不困难，这里我就介绍一些常见的开源微博客程序，有了这些 开源代码，只要稍懂一些电脑知识，就可以在短时间内搭建一个类似饭否或Twitter的微博客平台。<br />
<span id="more-2110"></span><br />
<a href="http://www.jaiku.com/" target="_blank">Jaiku</a></p>
<p>Jaiku（<a href="http://williamlong.jaiku.com/" target="_blank">演示地址</a>）是一个基于<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的微博客平台，2007年被Google收购，不过之后并没有对其成功运营，只好在2009年<a href="http://www.williamlong.info/archives/1658.html" target="_blank">宣布</a>对其停止维护，稍后Google就将Jaiku完全开源，并切换到AppEngine上运行，目前Jaiku<a href="http://www.williamlong.info/archives/1731.html" target="_blank">完全开源</a>并提供用户免费下载，大家可以到<a href="http://code.google.com/p/jaikuengine/" target="_blank">Jaiku源代码项目地址</a>，使用一个<a href="http://www.williamlong.info/archives/1878.html" target="_blank">SVN工具</a>下载其源代码。</p>
<p><a href="http://laconi.ca/trac/" target="_blank">Laconica</a></p>
<p>Laconica（<a href="http://identi.ca/williamlong" target="_blank">演示地址</a>） 是一个基于<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>和MySQL的开源微型博客系统，也是一个Twitter克隆，可以实现Microblog的常用功能，国外不少微博客系统都是通过这个 开源系统架设的。Laconica得到大量应用系统的支持，包括Twitterfeed、Hellotxt和Gravity等。<a href="http://laconi.ca/trac/" target="_blank">点这里</a>下载其源代码。</p>
<p><a href="http://sweetter.net/" target="_blank">Sweetter</a></p>
<p>Sweetter是一个开源的微博客项目，具有一定的投票机制，基于<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>，<a href="https://launchpad.net/sweetter" target="_blank">点这里</a>可下载其源程序代码。</p>
<p><a href="http://jisko.net/" target="_blank">Jisko</a></p>
<p>Jisko的界面和Twitter很像，能够自动通过AJAX更新，也是基于<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>和MySQL的，这个系统可能是西班牙人开发的，使用SVN<a href="http://jisko.org/" target="_blank">到这里</a>下载其源代码。</p>
<p>最后介绍两个国内中文的开源微博客系统。</p>
<p><a href="http://www.9italk.com/" target="_blank">EasyTalk</a></p>
<p>界面挺像饭否的，API接口也和饭否类似，基于<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>和MySQL，<a href="http://bbs.aaa35.com/attachment.aspx?attachmentid=454" target="_blank">点这里</a>下载源代码。</p>
<p><a href="http://www.pagecookery.com/" target="_blank">PageCookery</a></p>
<p>也是基于<a href="http://www.iwanna.cn/tags/php/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with PHP">PHP</a>和MySQL，支持和叽歪的同步，<a href="http://www.pagecookery.com/downloads/Pagecookery_microblog_0-5_rc_trial.zip" target="_blank">点这里</a>下载源代码。</p>
<p>好了，以上就是我介绍的一些免费开源微博客系统，通过这些程序，我们可以搭建一个自己的饭否或Twitter，是不是很酷啊。如果大家知道什么更好的开源系统，请留言和大家分享。</p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2009. |
<a href="http://www.iwanna.cn/archives/2009/08/08/2110/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2009/08/08/2110/#comments">1条评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2009/08/08/2110/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2009/08/08/2110/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2009/08/08/2110/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/tags/opensource/" title="OpenSource" rel="tag nofollow">OpenSource</a>, <a href="http://www.iwanna.cn/topics/develope/php/" title="PHP" rel="tag nofollow">PHP</a>, <a href="http://www.iwanna.cn/topics/develope/python/" title="Python" rel="tag nofollow">Python</a>, <a href="http://www.iwanna.cn/topics/develope/" title="程序开发" rel="tag nofollow">程序开发</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2009/07/01/1900/" title="网页鼠标点击轨迹热图跟踪软件-ClickHeat (2009年07月1日)">网页鼠标点击轨迹热图跟踪软件-ClickHeat</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/07/23/2056/" title="游戏开发者必需知道的5个开源游戏引擎 (2009年07月23日)">游戏开发者必需知道的5个开源游戏引擎</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/08/31/2198/" title="开源射击游戏Warsow 0.5版发布 (2009年08月31日)">开源射击游戏Warsow 0.5版发布</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/05/17/3191/" title="50个非常出色的开源博客 (2010年05月17日)">50个非常出色的开源博客</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/05/21/3275/" title="50款流行安全软件的开源替代品 (2010年05月21日)">50款流行安全软件的开源替代品</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2009/08/08/2110/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Python 3 系列教程 &#8211; developerWorks 中国</title>
		<link>http://www.iwanna.cn/archives/2009/05/06/959/</link>
		<comments>http://www.iwanna.cn/archives/2009/05/06/959/#comments</comments>
		<pubDate>Wed, 06 May 2009 12:37:49 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=959</guid>
		<description><![CDATA[Python 3 初探，第 1 部分：Python 3 的新特性
Python 3 初探，第 2 部分：Python 3 高级主题
占位方便日后的学习！

© 我想网 Akon 所有 , 2009. &#124;
永久链接 &#124;
没有评论 &#124;
提交到
Google Reader
鲜果
抓虾


	标签：Python, Python, Tutorial

	您可能会感兴趣的其他文章
	
	Python 语言快速入门教学 
	解密CSS Sprites：技巧、工具和教程 
	简单的JQuery聚光灯效果教程 
	用jQuery和CSS构建下拉菜单 
	掌握强大的WordPress的子主题 
	国外PHP开发者放弃PHP而改用Python 
	制作jquery文字提示插件 
	使用Photoshop制作 Web 2.0 布局的网站 [4] 
	使用Photoshop制作 Web 2.0 布局的网站 [3] 
	使用Photoshop制作 Web 2.0 布局的网站 [2] 



Feed enhanced by Better Feed from  Ozh
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ibm.com/developerworks/cn/linux/l-python3-1/?S_TACT=105AGX52&amp;S_CMP=content" target="_blank">Python 3 初探，第 1 部分：Python 3 的新特性</a></p>
<p><a href="http://www.ibm.com/developerworks/cn/linux/l-python3-2/" target="_blank">Python 3 初探，第 2 部分：Python 3 高级主题</a></p>
<p>占位方便日后的学习！</p>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2009. |
<a href="http://www.iwanna.cn/archives/2009/05/06/959/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2009/05/06/959/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2009/05/06/959/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2009/05/06/959/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2009/05/06/959/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/topics/develope/python/" title="Python" rel="tag nofollow">Python</a>, <a href="http://www.iwanna.cn/tags/python/" title="Python" rel="tag nofollow">Python</a>, <a href="http://www.iwanna.cn/tags/tutorial/" title="Tutorial" rel="tag nofollow">Tutorial</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/" title="Python 语言快速入门教学 (2010年06月24日)">Python 语言快速入门教学</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/04/30/915/" title="解密CSS Sprites：技巧、工具和教程 (2009年04月30日)">解密CSS Sprites：技巧、工具和教程</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/07/3765/" title="简单的JQuery聚光灯效果教程 (2010年06月7日)">简单的JQuery聚光灯效果教程</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/06/17/1828/" title="用jQuery和CSS构建下拉菜单 (2009年06月17日)">用jQuery和CSS构建下拉菜单</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/05/29/1215/" title="掌握强大的WordPress的子主题 (2009年05月29日)">掌握强大的WordPress的子主题</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/11/3900/" title="国外PHP开发者放弃PHP而改用Python (2010年06月11日)">国外PHP开发者放弃PHP而改用Python</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/17/4583/" title="制作jquery文字提示插件 (2010年07月17日)">制作jquery文字提示插件</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/05/09/3032/" title="使用Photoshop制作 Web 2.0 布局的网站 [4] (2010年05月9日)">使用Photoshop制作 Web 2.0 布局的网站 [4]</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/05/09/3029/" title="使用Photoshop制作 Web 2.0 布局的网站 [3] (2010年05月9日)">使用Photoshop制作 Web 2.0 布局的网站 [3]</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/05/09/3026/" title="使用Photoshop制作 Web 2.0 布局的网站 [2] (2010年05月9日)">使用Photoshop制作 Web 2.0 布局的网站 [2]</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2009/05/06/959/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python语言入门</title>
		<link>http://www.iwanna.cn/archives/2009/04/17/479/</link>
		<comments>http://www.iwanna.cn/archives/2009/04/17/479/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 02:35:37 +0000</pubDate>
		<dc:creator>seasun</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.iwanna.cn/?p=479</guid>
		<description><![CDATA[第1章    Python语言入门
1.1    HelloWorld


Python代码 


print &#8216;helloworld&#8217; 


print 'helloworld'
1.2    Python数学计算


Python代码 


print &#8216;helloworld&#8217; 
print 3 + 5 
x = 2 ** 2.5 #次方 
y = 0 
print x, y 
from math import * #引入math包 
print sqrt(3.0) 
print log10(2) 
print sin(pi / 3) 


print 'helloworld'
print 3 + 5
x = 2 ** 2.5 #次方
y = 0
print x, y
from math import * #引入math包
print sqrt(3.0)
print log10(2)
print sin(pi / [...]]]></description>
			<content:encoded><![CDATA[<p>第1章    <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>语言入门<br />
1.1    HelloWorld</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=print%20'helloworld'" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">print</span><span> </span><span class="string">&#8216;helloworld&#8217;</span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">print 'helloworld'</pre>
<p>1.2    <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>数学计算</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><span id="more-479"></span><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=print%20'helloworld'%0Aprint%203%20%2B%205%0Ax%20%3D%202%20**%202.5%20%23%E6%AC%A1%E6%96%B9%0Ay%20%3D%200%0Aprint%20x%2C%20y%0Afrom%20math%20import%20*%20%23%E5%BC%95%E5%85%A5math%E5%8C%85%0Aprint%20sqrt(3.0)%0Aprint%20log10(2)%0Aprint%20sin(pi%20%2F%203)" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">print</span><span> </span><span class="string">&#8216;helloworld&#8217;</span><span> </span></span></li>
<li><span><span class="keyword">print</span><span> </span><span class="number">3</span><span> + </span><span class="number">5</span><span> </span></span></li>
<li><span>x = <span class="number">2</span><span> ** </span><span class="number">2.5</span><span> </span><span class="comment">#次方</span><span> </span></span></li>
<li><span>y = <span class="number">0</span><span> </span></span></li>
<li><span><span class="keyword">print</span><span> x, y </span></span></li>
<li><span><span class="keyword">from</span><span> math </span><span class="keyword">import</span><span> * </span><span class="comment">#引入math包</span><span> </span></span></li>
<li><span><span class="keyword">print</span><span> sqrt(</span><span class="number">3.0</span><span>) </span></span></li>
<li><span><span class="keyword">print</span><span> log10(</span><span class="number">2</span><span>) </span></span></li>
<li><span><span class="keyword">print</span><span> sin(pi / </span><span class="number">3</span><span>) </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">print 'helloworld'
print 3 + 5
x = 2 ** 2.5 #次方
y = 0
print x, y
from math import * #引入math包
print sqrt(3.0)
print log10(2)
print sin(pi / 3)</pre>
<p>1.3    斐波那契数列</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=a%2C%20b%20%3D%200%2C%201%0Awhile%20b%20%3C%201000%3A%0A%20%20%20%20print%20b%2C%0A%20%20%20%20a%2C%20b%20%3D%20b%2C%20a%20%2B%20b%0A" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span>a, b = </span><span class="number">0</span><span>, </span><span class="number">1</span><span> </span></span></li>
<li><span><span class="keyword">while</span><span> b &lt; </span><span class="number">1000</span><span>: </span></span></li>
<li><span> <span class="keyword">print</span><span> b, </span></span></li>
<li><span> a, b = b, a + b </span></li>
</ol>
</div>
<pre class="python" style="display: none;">a, b = 0, 1
while b &lt; 1000:
    print b,
    a, b = b, a + b</pre>
<p>第2章    数据类型<br />
2.1    数字<br />
1、    <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>支持的数字类型包括：浮点数、整数、长整数等。<br />
2、    算数运算符包括:+、-、*、/、%等。<br />
3、    负号运算符 –。<br />
4、    位运算符 &lt;&lt;、&gt;&gt;、&amp;、^等。</p>
<p>2.2    字符串<br />
1、    单引号</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=print%20'this%20is%20a%20%22single-quoted%22%20string%2C%5Cn%20don%5C't%20you%20like%20it%3F'" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">print</span><span> </span><span class="string">&#8216;this is a &#8221;single-quoted&#8221; string,\n don\&#8217;t you like it?&#8217;</span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">print 'this is a "single-quoted" string,\n don\'t you like it?'</pre>
<p>2、    双引号</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=print%20%22this%20is%20a%20'double-quoted'%20string%22" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">print</span><span> </span><span class="string">&#8220;this is a &#8217;double-quoted&#8217; string&#8221;</span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">print "this is a 'double-quoted' string"</pre>
<p>3、    三引号</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=print%20'''this%20is%20a%20triply-quoted%20string%0A%E5%AD%97%E4%B8%B2%E4%B8%AD%E5%8F%AF%E4%BB%A5%E6%8F%9B%E8%A1%8C%2C%20%E4%B9%9F%E5%8F%AF%E4%BB%A5%E7%94%A8%E5%96%AE%E5%BC%95%E8%99%9F%E5%92%8C%E9%9B%99%E5%BC%95%E8%99%9F'''" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">print</span><span> </span><span class="string">&#8221;</span><span class="comment">&#8221;&#8217;this is a triply-quoted string</span> </span></li>
<li><span><span class="comment">字串中可以換行, 也可以用單引號和雙引號&#8221;&#8217;</span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">print '''this is a triply-quoted string
字串中可以換行, 也可以用單引號和雙引號'''</pre>
<p>注：使用三引号字符可以换行，并可以添加单引号和双引号</p>
<p>2.2.1    字符处理</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=s1%20%3D%20'Hello'%0As2%20%3D%20'World'%0Aprint%20s1%20%2B%20'%2C'%20%2B%20s2%20%23%E9%87%8D%E5%A4%8D%E6%89%93%E5%8D%B010%E4%B8%AA*%0A%0Aprint%20'*'%20*%2010%20%23%E9%87%8D%E5%A4%8D%E6%89%93%E5%8D%B010%E4%B8%AA*%0A%0Aprint%20'Hello%2CWorld!'%5B3%5D%20%20%23%E5%8F%96char%0A%0Afor%20c%20in%20'hello%2Cworld!'%3Aprint%20c%20%23%E5%BE%AA%E7%8E%AF%E6%9F%A5%E8%AF%A2char%0A%0Aprint%20'world'%20in%20'hello%2Cworld!'%20%23%E5%88%A4%E6%96%AD%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%98%AF%E5%90%A6%E5%8C%85%E5%90%AB%E5%AD%90%E4%B8%B2%EF%BC%8C%E8%BF%94%E5%9B%9Etrue%2Ffalse%0A%0Aprint%20'Hello%2CWorld!'%5B0%3A5%5D%20%23%E7%B1%BB%E4%BC%BCjava%E7%9A%84substring()%0A%0Aprint%20len('Hello%2CWorld!')%20%23%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%95%BF%E5%BA%A6%0A%0An%20%3D%2010%0Aprint%20'%E5%AD%A6%E7%94%9F%E4%BA%BA%E6%95%B0%E4%B8%BA%25d'%20%25%20n%20%23%E6%A0%BC%E5%BC%8F%E5%8C%96%E5%AD%97%E7%AC%A6%E4%B8%B2" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span>s1 = </span><span class="string">&#8216;Hello&#8217;</span><span> </span></span></li>
<li><span>s2 = <span class="string">&#8216;World&#8217;</span><span> </span></span></li>
<li><span><span class="keyword">print</span><span> s1 + </span><span class="string">&#8216;,&#8217;</span><span> + s2 </span><span class="comment">#重复打印10个*</span><span> </span></span></li>
<li><span> </span></li>
<li><span><span class="keyword">print</span><span> </span><span class="string">&#8216;*&#8217;</span><span> * </span><span class="number">10</span><span> </span><span class="comment">#重复打印10个*</span><span> </span></span></li>
<li><span> </span></li>
<li><span><span class="keyword">print</span><span> </span><span class="string">&#8216;Hello,World!&#8217;</span><span>[</span><span class="number">3</span><span>] </span><span class="comment">#取char</span><span> </span></span></li>
<li><span> </span></li>
<li><span><span class="keyword">for</span><span> c </span><span class="keyword">in</span><span> </span><span class="string">&#8216;hello,world!&#8217;</span><span>:</span><span class="keyword">print</span><span> c </span><span class="comment">#循环查询char</span><span> </span></span></li>
<li><span> </span></li>
<li><span><span class="keyword">print</span><span> </span><span class="string">&#8216;world&#8217;</span><span> </span><span class="keyword">in</span><span> </span><span class="string">&#8216;hello,world!&#8217;</span><span> </span><span class="comment">#判断字符串是否包含子串，返回true/false</span><span> </span></span></li>
<li><span> </span></li>
<li><span><span class="keyword">print</span><span> </span><span class="string">&#8216;Hello,World!&#8217;</span><span>[</span><span class="number">0</span><span>:</span><span class="number">5</span><span>] </span><span class="comment">#类似java的substring()</span><span> </span></span></li>
<li><span> </span></li>
<li><span><span class="keyword">print</span><span> len(</span><span class="string">&#8216;Hello,World!&#8217;</span><span>) </span><span class="comment">#字符串长度</span><span> </span></span></li>
<li><span> </span></li>
<li><span>n = <span class="number">10</span><span> </span></span></li>
<li><span><span class="keyword">print</span><span> </span><span class="string">&#8216;学生人数为%d&#8217;</span><span> % n </span><span class="comment">#格式化字符串</span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">s1 = 'Hello'
s2 = 'World'
print s1 + ',' + s2 #重复打印10个*

print '*' * 10 #重复打印10个*

print 'Hello,World!'[3]  #取char

for c in 'hello,world!':print c #循环查询char

print 'world' in 'hello,world!' #判断字符串是否包含子串，返回true/false

print 'Hello,World!'[0:5] #类似java的substring()

print len('Hello,World!') #字符串长度

n = 10
print '学生人数为%d' % n #格式化字符串</pre>
<p>2.3    List</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=m%20%3D%20%5B1%2C%205%2C%207%2C%20-3%2C%20-1%2C%200%5D%0Am.append(3)%20%23%E6%B7%BB%E5%8A%A0%E4%B8%80%E4%B8%AA%E5%85%83%E7%B4%A0%0Am.extend(%5B1%2C%200%2C%20-1%2C%20-2%5D)%20%23%E6%B7%BB%E5%8A%A0%E4%B8%80%E6%89%B9%E5%85%83%E7%B4%A0%0Adel%20m%5B1%3A3%5D%20%23%E5%88%A0%E9%99%A4%E5%85%83%E7%B4%A0%0Am%5B1%5D%20%3D%20-1%20%23%E6%8D%A2%E6%8E%89%E4%B8%80%E4%B8%AA%E5%85%83%E7%B4%A0%0Am.insert(-1%2C%203.5)%20%23%E6%8F%92%E5%85%A5%E5%85%83%E7%B4%A0%E5%8F%82%E6%95%B01%EF%BC%9A%E4%BD%8D%E7%BD%AE%EF%BC%8C%E5%8F%82%E6%95%B02%E4%B8%BA%E5%85%83%E7%B4%A0%0Am%5B2%3A4%5D%20%3D%20%5B3%2C%204%2C%205%5D%20%23%E6%8D%A2%E6%8E%89%E4%B8%80%E6%89%B9%E5%85%83%E7%B4%A0%0Am.sort()%20%23%E6%8E%92%E5%BA%8F%0Am.reverse()%20%23%E7%BF%BB%E8%BD%AC%0Am.len()%20%23%E9%95%BF%E5%BA%A6%0A%0Alistone%20%3D%20%5B2%2C%203%2C%204%5D%0Alisttwo%20%3D%20%5B2%20*%20i%20for%20i%20in%20listone%20if%20i%20%3E%202%5D%20%0Aprint%20listtwo%20%23%E8%BE%93%E5%87%BA%E7%BB%93%E6%9E%9C%E4%B8%BA6%2C8%0A%23%E4%B8%BA%E6%BB%A1%E8%B6%B3%E6%9D%A1%E4%BB%B6(if%20i%20%3E%202)%E7%9A%84%E6%95%B0%E6%8C%87%E5%AE%9A%E4%BA%86%E4%B8%80%E4%B8%AA%E6%93%8D%E4%BD%9C(2*i)" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span>m = [</span><span class="number">1</span><span>, </span><span class="number">5</span><span>, </span><span class="number">7</span><span>, -</span><span class="number">3</span><span>, -</span><span class="number">1</span><span>, </span><span class="number">0</span><span>] </span></span></li>
<li><span>m.append(<span class="number">3</span><span>) </span><span class="comment">#添加一个元素</span><span> </span></span></li>
<li><span>m.extend([<span class="number">1</span><span>, </span><span class="number">0</span><span>, -</span><span class="number">1</span><span>, -</span><span class="number">2</span><span>]) </span><span class="comment">#添加一批元素</span><span> </span></span></li>
<li><span><span class="keyword">del</span><span> m[</span><span class="number">1</span><span>:</span><span class="number">3</span><span>] </span><span class="comment">#删除元素</span><span> </span></span></li>
<li><span>m[<span class="number">1</span><span>] = -</span><span class="number">1</span><span> </span><span class="comment">#换掉一个元素</span><span> </span></span></li>
<li><span>m.insert(-<span class="number">1</span><span>, </span><span class="number">3.5</span><span>) </span><span class="comment">#插入元素参数1：位置，参数2为元素</span><span> </span></span></li>
<li><span>m[<span class="number">2</span><span>:</span><span class="number">4</span><span>] = [</span><span class="number">3</span><span>, </span><span class="number">4</span><span>, </span><span class="number">5</span><span>] </span><span class="comment">#换掉一批元素</span><span> </span></span></li>
<li><span>m.sort() <span class="comment">#排序</span><span> </span></span></li>
<li><span>m.reverse() <span class="comment">#翻转</span><span> </span></span></li>
<li><span>m.len() <span class="comment">#长度</span><span> </span></span></li>
<li><span> </span></li>
<li><span>listone = [<span class="number">2</span><span>, </span><span class="number">3</span><span>, </span><span class="number">4</span><span>] </span></span></li>
<li><span>listtwo = [<span class="number">2</span><span> * i </span><span class="keyword">for</span><span> i </span><span class="keyword">in</span><span> listone </span><span class="keyword">if</span><span> i &gt; </span><span class="number">2</span><span>] </span></span></li>
<li><span><span class="keyword">print</span><span> listtwo </span><span class="comment">#输出结果为6,8</span><span> </span></span></li>
<li><span><span class="comment">#为满足条件(if i &gt; 2)的数指定了一个操作(2*i)</span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">m = [1, 5, 7, -3, -1, 0]
m.append(3) #添加一个元素
m.extend([1, 0, -1, -2]) #添加一批元素
del m[1:3] #删除元素
m[1] = -1 #换掉一个元素
m.insert(-1, 3.5) #插入元素参数1：位置，参数2为元素
m[2:4] = [3, 4, 5] #换掉一批元素
m.sort() #排序
m.reverse() #翻转
m.len() #长度

listone = [2, 3, 4]
listtwo = [2 * i for i in listone if i &gt; 2]
print listtwo #输出结果为6,8
#为满足条件(if i &gt; 2)的数指定了一个操作(2*i)</pre>
<p>2.4    字典Directory</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=prices%20%3D%20%7B%20'apple'%3A%207.5%2C%20'orange'%3A%204.5%2C%20'banana'%3A%202%7D%0Aprices%5B'orange'%5D%20%23%20%E6%A0%B9%E6%8D%AE%E9%94%AE%E8%8E%B7%E5%80%BC%0Aprices.has_key('tomato')%0Aprices.keys()%20%23%20%E8%8E%B7%E5%8F%96%E9%94%AE%E9%9B%86%E5%90%88%0Aprices%5B'guava'%5D%20%3D%206.7%20%23%20%E6%B7%BB%E5%8A%A0%E5%85%83%E7%B4%A0" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span>prices = { </span><span class="string">&#8216;apple&#8217;</span><span>: </span><span class="number">7.5</span><span>, </span><span class="string">&#8216;orange&#8217;</span><span>: </span><span class="number">4.5</span><span>, </span><span class="string">&#8216;banana&#8217;</span><span>: </span><span class="number">2</span><span>} </span></span></li>
<li><span>prices[<span class="string">'orange'</span><span>] </span><span class="comment"># 根据键获值</span><span> </span></span></li>
<li><span>prices.has_key(<span class="string">&#8216;tomato&#8217;</span><span>) </span></span></li>
<li><span>prices.keys() <span class="comment"># 获取键集合</span><span> </span></span></li>
<li><span>prices[<span class="string">'guava'</span><span>] = </span><span class="number">6.7</span><span> </span><span class="comment"># 添加元素</span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">prices = { 'apple': 7.5, 'orange': 4.5, 'banana': 2}
prices['orange'] # 根据键获值
prices.has_key('tomato')
prices.keys() # 获取键集合
prices['guava'] = 6.7 # 添加元素</pre>
<p>第3章    流程控制<br />
3.1    流程控制</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=a%20%3D%20'wangtong'%0Aif%20a%20%3D%3D%20'wang'%3A%0A%20%20%20%20print%20'%5B%25s%5D'%20%25%20a%0Aelif%20not%20a%20%3D%3D%20'tong'%3A%20%23%E6%B2%A1%E6%9C%89%E6%88%96%E8%80%85%E6%9C%89%E5%A4%9A%E4%B8%AA%0A%20%20%20%20print%20'%5B%25s%5D'%20%25%20a%0Aelse%3A%0Aprint%20'%5B%25s%5D'%20%25%20a" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span>a = </span><span class="string">&#8216;wangtong&#8217;</span><span> </span></span></li>
<li><span><span class="keyword">if</span><span> a == </span><span class="string">&#8216;wang&#8217;</span><span>: </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;[%s]&#8216;</span><span> % a </span></span></li>
<li><span><span class="keyword">elif</span><span> </span><span class="keyword">not</span><span> a == </span><span class="string">&#8216;tong&#8217;</span><span>: </span><span class="comment">#没有或者有多个</span><span> </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;[%s]&#8216;</span><span> % a </span></span></li>
<li><span><span class="keyword">else</span><span>: </span></span></li>
<li><span><span class="keyword">print</span><span> </span><span class="string">&#8216;[%s]&#8216;</span><span> % a </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">a = 'wangtong'
if a == 'wang':
    print '[%s]' % a
elif not a == 'tong': #没有或者有多个
    print '[%s]' % a
else:
print '[%s]' % a</pre>
<p>3.2    逻辑表达式</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=a%2C%20b%20%3D%205%2C%201%0Adef%20func(x)%3A%0A%20%20%20%20print%20'x%3D%25s%20in%20func'%20%25%20x%0A%20%20%20%20return%201%0Aprint%20a%20%3D%3D%205%20or%20func(a)%20%23%E5%85%88%E5%88%A4%E6%96%ADa%3D5%E3%80%81%E5%86%8D%E5%88%A4%E6%96%ADfunc(a)%E3%80%81%E6%9C%80%E5%90%8E%E6%98%AFor%0Aprint%20a%20%3E%20b%20and%20func(b)%20%23%E5%88%A4%E6%96%ADa%3Eb%E3%80%81func(b)%E3%80%81%E6%9C%80%E5%90%8Eand" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span>a, b = </span><span class="number">5</span><span>, </span><span class="number">1</span><span> </span></span></li>
<li><span><span class="keyword">def</span><span> func(x): </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;x=%s in func&#8217;</span><span> % x </span></span></li>
<li><span> <span class="keyword">return</span><span> </span><span class="number">1</span><span> </span></span></li>
<li><span><span class="keyword">print</span><span> a == </span><span class="number">5</span><span> </span><span class="keyword">or</span><span> func(a) </span><span class="comment">#先判断a=5、再判断func(a)、最后是or</span><span> </span></span></li>
<li><span><span class="keyword">print</span><span> a &gt; b </span><span class="keyword">and</span><span> func(b) </span><span class="comment">#判断a&gt;b、func(b)、最后and</span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">a, b = 5, 1
def func(x):
    print 'x=%s in func' % x
    return 1
print a == 5 or func(a) #先判断a=5、再判断func(a)、最后是or
print a &gt; b and func(b) #判断a&gt;b、func(b)、最后and</pre>
<p>?    逻辑非 not、和 and 、或 or<br />
?    在 in 、 不在 not in<br />
?    比较运算符: 相等 == 不相等 != 大於 &gt; 小於 &lt; 不小於 &gt;= 不大於 &lt;=<br />
可串接: 如 a &lt; b &lt; c != d &gt; g 即等同于 a &lt; b and b &lt; c and c != d and d &gt; g<br />
?    优先順序: 在、不在 &gt; 比较 &gt; 非 &gt; 和 &gt; 或</p>
<p>3.3    循环<br />
3.3.1    For循环</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=array%20%3D%20%5B'apple'%2C%20'tangerine'%2C%20'banana'%5D%0Aprint%20array%0Afor%20fruit%20in%20array%3A%20%23for%E5%BE%AA%E7%8E%AF%0A%20%20%20%20print%20fruit%2C%20len(fruit)%0A%20%20%20%20if%20fruit%5B0%5D%20%3E%20'p'%3A%0A%20%20%20%20%20%20%20%20break%0A3.3.2%20%20%20%20For%E5%88%86%E5%8F%89%0Afor%20n%20in%20range(2%2C%2010)%3A%0A%20%20%20%20for%20x%20in%20range(2%2C%20n)%3A%0A%20%20%20%20%20%20%20%20if%20n%20%25%20x%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print%20n%2C%20'equals'%2C%20x%2C%20'*'%2C%20n%20%2F%20x%0A%20%20%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20else%3A%23%20not%20for%20%22if%22%2C%20but%20for%20end-of-for-loop%0A%20%20%20%20%20%20%20%20%20%20%20%20print%20n%2C%20'is%20a%20prime%20number'" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span>array = [</span><span class="string">'apple'</span><span>, </span><span class="string">'tangerine'</span><span>, </span><span class="string">'banana'</span><span>] </span></span></li>
<li><span><span class="keyword">print</span><span> array </span></span></li>
<li><span><span class="keyword">for</span><span> fruit </span><span class="keyword">in</span><span> array: </span><span class="comment">#for循环</span><span> </span></span></li>
<li><span> <span class="keyword">print</span><span> fruit, len(fruit) </span></span></li>
<li><span> <span class="keyword">if</span><span> fruit[</span><span class="number">0</span><span>] &gt; </span><span class="string">&#8216;p&#8217;</span><span>: </span></span></li>
<li><span> <span class="keyword">break</span><span> </span></span></li>
<li><span><span class="number">3.3</span><span>.</span><span class="number">2</span><span> For分叉 </span></span></li>
<li><span><span class="keyword">for</span><span> n </span><span class="keyword">in</span><span> range(</span><span class="number">2</span><span>, </span><span class="number">10</span><span>): </span></span></li>
<li><span> <span class="keyword">for</span><span> x </span><span class="keyword">in</span><span> range(</span><span class="number">2</span><span>, n): </span></span></li>
<li><span> <span class="keyword">if</span><span> n % x == </span><span class="number">0</span><span>: </span></span></li>
<li><span> <span class="keyword">print</span><span> n, </span><span class="string">&#8216;equals&#8217;</span><span>, x, </span><span class="string">&#8216;*&#8217;</span><span>, n / x </span></span></li>
<li><span> <span class="keyword">break</span><span> </span></span></li>
<li><span> <span class="keyword">else</span><span>:</span><span class="comment"># not for &#8221;if&#8221;, but for end-of-for-loop</span><span> </span></span></li>
<li><span> <span class="keyword">print</span><span> n, </span><span class="string">&#8216;is a prime number&#8217;</span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">array = ['apple', 'tangerine', 'banana']
print array
for fruit in array: #for循环
    print fruit, len(fruit)
    if fruit[0] &gt; 'p':
        break
3.3.2    For分叉
for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print n, 'equals', x, '*', n / x
            break
    else:# not for "if", but for end-of-for-loop
            print n, 'is a prime number'</pre>
<p>?    break: 跳出循环<br />
?    continue: 略过区块的以下部分、从循环的下一次继续<br />
?    else: 在循环走到底时执行</p>
<p>3.3.3    For小技巧<br />
3.3.3.1    遍历字典</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=prices%20%3D%20%7B%20'apple'%3A%207.5%2C%20'orange'%3A%204.5%2C%20'banana'%3A%202%7D%0Afor%20stuff%2C%20price%20in%20prices.items()%3A%0A%20print%20stuff%2C%20'%E4%BB%B7%E6%A0%BC%E6%98%AF'%2C%20price" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span>prices = { </span><span class="string">&#8216;apple&#8217;</span><span>: </span><span class="number">7.5</span><span>, </span><span class="string">&#8216;orange&#8217;</span><span>: </span><span class="number">4.5</span><span>, </span><span class="string">&#8216;banana&#8217;</span><span>: </span><span class="number">2</span><span>} </span></span></li>
<li><span><span class="keyword">for</span><span> stuff, price </span><span class="keyword">in</span><span> prices.items(): </span></span></li>
<li><span> <span class="keyword">print</span><span> stuff, </span><span class="string">&#8216;价格是&#8217;</span><span>, price </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">prices = { 'apple': 7.5, 'orange': 4.5, 'banana': 2}
for stuff, price in prices.items():
 print stuff, '价格是', price</pre>
<p>3.3.3.2    列出序列索引</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=prices%20%3D%20%7B%20'apple'%3A%207.5%2C%20'orange'%3A%204.5%2C%20'banana'%3A%202%7D%0Am%20%3D%20prices.keys()%0Am.sort()%0Afor%20i%2C%20v%20in%20enumerate(m)%3A%0A%20%20%20%20print%20i%2C%20v%0A" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span>prices = { </span><span class="string">&#8216;apple&#8217;</span><span>: </span><span class="number">7.5</span><span>, </span><span class="string">&#8216;orange&#8217;</span><span>: </span><span class="number">4.5</span><span>, </span><span class="string">&#8216;banana&#8217;</span><span>: </span><span class="number">2</span><span>} </span></span></li>
<li><span>m = prices.keys() </span></li>
<li><span>m.sort() </span></li>
<li><span><span class="keyword">for</span><span> i, v </span><span class="keyword">in</span><span> enumerate(m): </span></span></li>
<li><span> <span class="keyword">print</span><span> i, v </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">prices = { 'apple': 7.5, 'orange': 4.5, 'banana': 2}
m = prices.keys()
m.sort()
for i, v in enumerate(m):
    print i, v</pre>
<p>输出结果：<br />
0 apple<br />
1 banana<br />
2 orange</p>
<p>3.3.3.3    同时循环2个序列</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=questions%20%3D%20%5B%20'name'%20%2C%20'quest'%20%2C%20'favorite%20color'%20%5D%0Aanswers%20%3D%20%5B%20'lancelot'%20%2C%20'the%20holy%20grail'%20%2C%20'blue'%5D%0Afor%20q%2C%20a%20in%20zip(questions%2C%20answers)%3A%0Aprint%20'What%20is%20your%20%25s%3F%20It%20is%20%25s.'%20%25%20(q%2C%20a)" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span>questions = [ </span><span class="string">'name'</span><span> , </span><span class="string">'quest'</span><span> , </span><span class="string">'favorite color'</span><span> ] </span></span></li>
<li><span>answers = [ <span class="string">'lancelot'</span><span> , </span><span class="string">'the holy grail'</span><span> , </span><span class="string">'blue'</span><span>] </span></span></li>
<li><span><span class="keyword">for</span><span> q, a </span><span class="keyword">in</span><span> zip(questions, answers): </span></span></li>
<li><span><span class="keyword">print</span><span> </span><span class="string">&#8216;What is your %s? It is %s.&#8217;</span><span> % (q, a) </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">questions = [ 'name' , 'quest' , 'favorite color' ]
answers = [ 'lancelot' , 'the holy grail' , 'blue']
for q, a in zip(questions, answers):
print 'What is your %s? It is %s.' % (q, a)</pre>
<p>3.3.4    While循环</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=i%20%3D%207%0Awhile%20i%20%3E%200%3A%0A%20%20%20%20print%20i%0A%20%20%20%20i%20%3D%20i%20-1" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span>i = </span><span class="number">7</span><span> </span></span></li>
<li><span><span class="keyword">while</span><span> i &gt; </span><span class="number">0</span><span>: </span></span></li>
<li><span> <span class="keyword">print</span><span> i </span></span></li>
<li><span> i = i -<span class="number">1</span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">i = 7
while i &gt; 0:
    print i
    i = i -1</pre>
<p>3.3.5    Range范围函数</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=print%20range(10)%20%230%20-%2010%20%E5%BE%AA%E7%8E%AF10%E6%AC%A1%0Aprint%20range(3%2C%206)%20%23%20%E5%8C%85%E6%8B%AC%203%2C%20%E4%B8%8D%E5%8C%85%E6%8B%AC%206%0Aprint%20range(2%2C%208%2C%202)%20%20%23%20%E6%AF%8F%E6%AD%A5%E5%8A%A0%202%0Am%20%3D%20%5Bx%20*%20x%20for%20x%20in%20range(4)%5D%20%23%20%20(list%20comprehension)%0Aprint%20m%0Afor%20i%20in%20range(len(m))%3A%0A%20%20%20%20print%20i%2C%20m%5Bi%5D" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">print</span><span> range(</span><span class="number">10</span><span>) </span><span class="comment">#0 - 10 循环10次</span><span> </span></span></li>
<li><span><span class="keyword">print</span><span> range(</span><span class="number">3</span><span>, </span><span class="number">6</span><span>) </span><span class="comment"># 包括 3, 不包括 6</span><span> </span></span></li>
<li><span><span class="keyword">print</span><span> range(</span><span class="number">2</span><span>, </span><span class="number">8</span><span>, </span><span class="number">2</span><span>) </span><span class="comment"># 每步加 2</span><span> </span></span></li>
<li><span>m = [x * x <span class="keyword">for</span><span> x </span><span class="keyword">in</span><span> range(</span><span class="number">4</span><span>)] </span><span class="comment">#  (list comprehension)</span><span> </span></span></li>
<li><span><span class="keyword">print</span><span> m </span></span></li>
<li><span><span class="keyword">for</span><span> i </span><span class="keyword">in</span><span> range(len(m)): </span></span></li>
<li><span> <span class="keyword">print</span><span> i, m[i] </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">print range(10) #0 - 10 循环10次
print range(3, 6) # 包括 3, 不包括 6
print range(2, 8, 2)  # 每步加 2
m = [x * x for x in range(4)] #  (list comprehension)
print m
for i in range(len(m)):
    print i, m[i]</pre>
<p>第4章    函数<br />
4.1    函数基础</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=def%20distance(v0%2Ca%2Ct)%3A%0A%20%20%20%20return%20v0*t%20%2B%20a%2F2.0%20*%20t*t%0Aprint%20distance(1%2C%202%2C%203)" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">def</span><span> distance(v0,a,t): </span></span></li>
<li><span> <span class="keyword">return</span><span> v0*t + a/</span><span class="number">2.0</span><span> * t*t </span></span></li>
<li><span><span class="keyword">print</span><span> distance(</span><span class="number">1</span><span>, </span><span class="number">2</span><span>, </span><span class="number">3</span><span>) </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">def distance(v0,a,t):
    return v0*t + a/2.0 * t*t
print distance(1, 2, 3)</pre>
<p>4.2    预设参数值</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=def%20eat(maxprice%2C%20lunch%3D'chickenrice'%2C%20soup%3D'no')%3A%0A%20%20%20%20print%20'will%20eat'%2C%20lunch%2C%20'for%20lunch%20with'%2C%20soup%2C%20'soup%20for%20less%20than'%2C%20maxprice%0Aeat(150%2C%20'%E5%A4%A9%E4%B8%BC'%2C%20'%E5%91%B3%E5%99%8C')%0Aeat(130%2C%20'%E5%A4%A9%E4%B8%BC')%0Aeat(130%2C%20soup%3D'%E7%BE%85%E5%AE%8B')%0Aeat(150%2C%20soup%3D'%E7%BE%85%E5%AE%8B'%2C%20lunch%3D'pasta')" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">def</span><span> eat(maxprice, lunch=</span><span class="string">&#8216;chickenrice&#8217;</span><span>, soup=</span><span class="string">&#8216;no&#8217;</span><span>): </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;will eat&#8217;</span><span>, lunch, </span><span class="string">&#8216;for lunch with&#8217;</span><span>, soup, </span><span class="string">&#8217;soup for less than&#8217;</span><span>, maxprice </span></span></li>
<li><span>eat(<span class="number">150</span><span>, </span><span class="string">&#8216;天丼&#8217;</span><span>, </span><span class="string">&#8216;味噌&#8217;</span><span>) </span></span></li>
<li><span>eat(<span class="number">130</span><span>, </span><span class="string">&#8216;天丼&#8217;</span><span>) </span></span></li>
<li><span>eat(<span class="number">130</span><span>, soup=</span><span class="string">&#8216;羅宋&#8217;</span><span>) </span></span></li>
<li><span>eat(<span class="number">150</span><span>, soup=</span><span class="string">&#8216;羅宋&#8217;</span><span>, lunch=</span><span class="string">&#8216;pasta&#8217;</span><span>) </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">def eat(maxprice, lunch='chickenrice', soup='no'):
    print 'will eat', lunch, 'for lunch with', soup, 'soup for less than', maxprice
eat(150, '天丼', '味噌')
eat(130, '天丼')
eat(130, soup='羅宋')
eat(150, soup='羅宋', lunch='pasta')</pre>
<p>在定义函数时: 有预设的参数必须在位置参数的后面<br />
4.3    DocString</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=def%20printMax(x%2C%20y)%3A%0A%20%20%20%20'''Prints%20the%20maximum%20of%20two%20numbers.%0A%20%20%20%20The%20two%20values%20must%20be%20integers.'''%0A%20%20%20%20x%20%3D%20int(x)%20%23%20convert%20to%20integers%2C%20if%20possible%0A%20%20%20%20y%20%3D%20int(y)%0A%20%20%20%20if%20x%20%3E%20y%3A%0A%20%20%20%20%20%20%20%20print%20x%2C%20'is%20maximum'%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20print%20y%2C%20'is%20maximum'%0AprintMax(3%2C%205)%0Aprint%20printMax.__doc__%20%23%E4%BD%BF%E7%94%A8__doc__%E5%AE%9E%E7%8E%B0docString%20%E5%AE%9E%E7%8E%B0%E6%89%93%E5%8D%B0%E6%96%87%E6%A1%A3%E5%AD%97%E7%AC%A6%E4%B8%B2" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">def</span><span> printMax(x, y): </span></span></li>
<li><span> <span class="string">&#8221;</span><span class="comment">&#8221;&#8217;Prints the maximum of two numbers.</span> </span></li>
<li><span><span class="comment"> The two values must be integers.&#8221;&#8217;</span><span> </span></span></li>
<li><span> x = int(x) <span class="comment"># convert to integers, if possible</span><span> </span></span></li>
<li><span> y = int(y) </span></li>
<li><span> <span class="keyword">if</span><span> x &gt; y: </span></span></li>
<li><span> <span class="keyword">print</span><span> x, </span><span class="string">&#8216;is maximum&#8217;</span><span> </span></span></li>
<li><span> <span class="keyword">else</span><span>: </span></span></li>
<li><span> <span class="keyword">print</span><span> y, </span><span class="string">&#8216;is maximum&#8217;</span><span> </span></span></li>
<li><span>printMax(<span class="number">3</span><span>, </span><span class="number">5</span><span>) </span></span></li>
<li><span><span class="keyword">print</span><span> printMax.__doc__ </span><span class="comment">#使用__doc__实现docString 实现打印文档字符串</span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">def printMax(x, y):
    '''Prints the maximum of two numbers.
    The two values must be integers.'''
    x = int(x) # convert to integers, if possible
    y = int(y)
    if x &gt; y:
        print x, 'is maximum'
    else:
        print y, 'is maximum'
printMax(3, 5)
print printMax.__doc__ #使用__doc__实现docString 实现打印文档字符串</pre>
<p>输出结果：<br />
5 is maximum<br />
Prints the maximum of two numbers.<br />
The two values must be integers.</p>
<p>第5章    模块<br />
5.1    使用SYS模块</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=import%20sys%20%20%23%E5%BC%95%E5%85%A5sys%E6%A8%A1%E5%9D%97%2Csys%E6%A8%A1%E5%9D%97%E5%8C%85%E5%90%AB%E4%BA%86%E4%B8%8EPython%E8%A7%A3%E9%87%8A%E5%99%A8%E5%92%8C%E5%AE%83%E7%9A%84%E7%8E%AF%E5%A2%83%E6%9C%89%E5%85%B3%E7%9A%84%E5%87%BD%E6%95%B0%0Aprint%20'The%20command%20line%20arguments%20are%3A'%0Afor%20i%20in%20sys.argv%3A%0A%20%20%20%20print%20i%0Aprint%20'%5Cn%5CnThe%20PYTHONPATH%20is'%2C%20sys.path%2C%20'%5Cn'" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">import</span><span> sys </span><span class="comment">#引入sys模块,sys模块包含了与<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>解释器和它的环境有关的函数</span><span> </span></span></li>
<li><span><span class="keyword">print</span><span> </span><span class="string">&#8216;The command line arguments are:&#8217;</span><span> </span></span></li>
<li><span><span class="keyword">for</span><span> i </span><span class="keyword">in</span><span> sys.argv: </span></span></li>
<li><span> <span class="keyword">print</span><span> i </span></span></li>
<li><span><span class="keyword">print</span><span> </span><span class="string">&#8216;\n\nThe PYTHONPATH is&#8217;</span><span>, sys.path, </span><span class="string">&#8216;\n&#8217;</span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">import sys  #引入sys模块,sys模块包含了与<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>解释器和它的环境有关的函数
print 'The command line arguments are:'
for i in sys.argv:
    print i
print '\n\nThe PYTHONPATH is', sys.path, '\n'</pre>
<p>5.2    From …import<br />
from math import * #引入math包<br />
注:从代码可读性考虑，尽量避免使用from…import方式导入模块，推荐使用import方式<br />
5.3    模块的__name__</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=if%20__name__%20%3D%3D%20'__main__'%3A%0A%20%20%20%20print%20'This%20program%20is%20being%20run%20by%20itself'%0Aelse%3A%0A%20%20%20%20print%20'I%20am%20being%20imported%20from%20another%20module'" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">if</span><span> __name__ == </span><span class="string">&#8216;__main__&#8217;</span><span>: </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;This program is being run by itself&#8217;</span><span> </span></span></li>
<li><span><span class="keyword">else</span><span>: </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;I am being imported from another module&#8217;</span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">if __name__ == '__main__':
    print 'This program is being run by itself'
else:
    print 'I am being imported from another module'</pre>
<p>5.4    创建模块</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=def%20sayhi()%3A%0A%20%20%20%20print%20'Hi%2C%20this%20is%20mymodule%20speaking.'%0Aversion%20%3D%20'0.1'" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">def</span><span> sayhi(): </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;Hi, this is mymodule speaking.&#8217;</span><span> </span></span></li>
<li><span>version = <span class="string">&#8216;0.1&#8242;</span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">def sayhi():
    print 'Hi, this is mymodule speaking.'
version = '0.1'</pre>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=import%20module%20%23%E5%AF%BC%E5%85%A5%E6%A8%A1%E5%9D%97%0Amodule.sayhi()%20%23%E8%B0%83%E7%94%A8%E6%A8%A1%E5%9D%97%E7%9A%84%E6%96%B9%E6%B3%95%0Aprint%20'Version'%2C%20module.version" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">import</span><span> module </span><span class="comment">#导入模块</span><span> </span></span></li>
<li><span>module.sayhi() <span class="comment">#调用模块的方法</span><span> </span></span></li>
<li><span><span class="keyword">print</span><span> </span><span class="string">&#8216;Version&#8217;</span><span>, module.version </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">import module #导入模块
module.sayhi() #调用模块的方法
print 'Version', module.version</pre>
<p>5.5    Dir函数<br />
可以使用内建的dir()来列出模块定义的标识符。标识符有函数、类和变量。<br />
当你为dir()提供一个模块名的时候，它返回模块定义的名称列表。如果不提供参数，它返回当前模块中定义的名称列表。</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=import%20sys%0Aprint%20dir(sys)%20%23%20get%20list%20of%20attributes%20for%20sys%20module" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">import</span><span> sys </span></span></li>
<li><span><span class="keyword">print</span><span> dir(sys) </span><span class="comment"># get list of attributes for sys module</span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">import sys
print dir(sys) # get list of attributes for sys module</pre>
<p>第6章    面向对象编程<br />
6.1    Self<br />
在<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的Self相当于Java的this指针。<br />
6.2    Class</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=class%20Person%3A%0A%20%20%20%20pass%20%23%20An%20empty%20block%0A%0Ap%20%3D%20Person()%0Aprint%20p%20%23%20%E8%BF%94%E5%9B%9E%E7%BB%93%E6%9E%9C%E4%B8%BA%3C__main__.Person%20instance%20at%201%3E%20" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">class</span><span> Person: </span></span></li>
<li><span> <span class="keyword">pass</span><span> </span><span class="comment"># An empty block</span><span> </span></span></li>
<li><span> </span></li>
<li><span>p = Person() </span></li>
<li><span><span class="keyword">print</span><span> p </span><span class="comment"># 返回结果为&lt;__main__.Person instance at 1&gt; </span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">class Person:
    pass # An empty block

p = Person()
print p # 返回结果为&lt;__main__.Person instance at 1&gt;</pre>
<p>6.3    __Init__方法<br />
注：__Init__方法就是<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>的构造器，用于初始化值和对象</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=class%20Person%3A%0A%20%20%20%20def%20__init__(self%2C%20name)%3A%20%23%E5%88%9D%E5%A7%8B%E5%8C%96%E6%96%B9%E6%B3%95%0A%20%20%20%20%20%20%20%20self.name%20%3D%20name%0A%20%20%20%20def%20sayHi(self)%3A%0A%20%20%20%20%20%20%20%20print%20'Hello%2C%20my%20name%20is'%2C%20self.name%0A%0Ap%20%3D%20Person('Swaroop')%20%23%E5%AE%9E%E4%BE%8B%E5%8C%96%0Ap.sayHi()" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">class</span><span> Person: </span></span></li>
<li><span> <span class="keyword">def</span><span> __init__(</span><span class="special">self</span><span>, name): </span><span class="comment">#初始化方法</span><span> </span></span></li>
<li><span> <span class="special">self</span><span>.name = name </span></span></li>
<li><span> <span class="keyword">def</span><span> sayHi(</span><span class="special">self</span><span>): </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;Hello, my name is&#8217;</span><span>, </span><span class="special">self</span><span>.name </span></span></li>
<li><span> </span></li>
<li><span>p = Person(<span class="string">&#8216;Swaroop&#8217;</span><span>) </span><span class="comment">#实例化</span><span> </span></span></li>
<li><span>p.sayHi() </span></li>
</ol>
</div>
<pre class="python" style="display: none;">class Person:
    def __init__(self, name): #初始化方法
        self.name = name
    def sayHi(self):
        print 'Hello, my name is', self.name

p = Person('Swaroop') #实例化
p.sayHi()</pre>
<p>6.4    类与对象方法<br />
类的变量:由一个类的所有对象（实例）共享使用。只有一个类变量的拷贝，所以</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=class%20Person%3A%0A%20%20%20%20'''Represents%20a%20person.'''%0A%20%20%20%20population%20%3D%200%20%23%E7%B1%BB%E5%8F%98%E9%87%8F%0A%0A%20%20%20%20def%20__init__(self%2C%20name)%3A%0A%20%20%20%20%20%20%20%20'''Initializes%20the%20person's%20data.'''%0A%20%20%20%20%20%20%20%20self.name%20%3D%20name%0A%20%20%20%20%20%20%20%20print%20'(Initializing%20%25s)'%20%25%20self.name%0A%20%20%20%20%20%20%20%20%23When%20this%20person%20is%20created%2C%20he%2Fshe%20adds%20to%20the%20population%0A%20%20%20%20%20%20%20%20Person.population%20%2B%3D%201%0A%0A%20%20%20%20def%20__del__(self)%3A%0A%20%20%20%20%20%20%20%20'''I%20am%20dying.'''%0A%20%20%20%20%20%20%20%20print%20'%25s%20says%20bye.'%20%25%20self.name%0A%0A%20%20%20%20%20%20%20%20Person.population%20-%3D%201%0A%0A%20%20%20%20%20%20%20%20if%20Person.population%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print%20'I%20am%20the%20last%20one.'%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print%20'There%20are%20still%20%25d%20people%20left.'%20%25%20Person.population%0A%0A%20%20%20%20def%20sayHi(self)%3A%0A%20%20%20%20%20%20%20%20'''Greeting%20by%20the%20person.%0A%0A%20%20%20%20%20%20%20%20Really%2C%20that's%20all%20it%20does.'''%0A%20%20%20%20%20%20%20%20print%20'Hi%2C%20my%20name%20is%20%25s.'%20%25%20self.name%0A%0A%20%20%20%20def%20howMany(self)%3A%0A%20%20%20%20%20%20%20%20'''Prints%20the%20current%20population.'''%0A%20%20%20%20%20%20%20%20if%20Person.population%20%3D%3D%201%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print%20'I%20am%20the%20only%20person%20here.'%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print%20'We%20have%20%25d%20persons%20here.'%20%25%20Person.population%0A%0Aswaroop%20%3D%20Person('Swaroop')%0Aswaroop.sayHi()%0Aswaroop.howMany()%0A%0Akalam%20%3D%20Person('Abdul%20Kalam')%0Akalam.sayHi()%0Akalam.howMany()%0A%0Aswaroop.sayHi()%0Aswaroop.howMany()" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">class</span><span> Person: </span></span></li>
<li><span> <span class="string">&#8221;</span><span class="comment">&#8221;&#8217;Represents a person.&#8221;&#8217;</span><span> </span></span></li>
<li><span> population = <span class="number">0</span><span> </span><span class="comment">#类变量</span><span> </span></span></li>
<li><span> </span></li>
<li><span> <span class="keyword">def</span><span> __init__(</span><span class="special">self</span><span>, name): </span></span></li>
<li><span> <span class="string">&#8221;</span><span class="comment">&#8221;&#8217;Initializes the person&#8217;s data.&#8221;&#8217;</span><span> </span></span></li>
<li><span> <span class="special">self</span><span>.name = name </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;(Initializing %s)&#8217;</span><span> % </span><span class="special">self</span><span>.name </span></span></li>
<li><span> <span class="comment">#When this person is created, he/she adds to the population</span><span> </span></span></li>
<li><span> Person.population += <span class="number">1</span><span> </span></span></li>
<li><span> </span></li>
<li><span> <span class="keyword">def</span><span> __del__(</span><span class="special">self</span><span>): </span></span></li>
<li><span> <span class="string">&#8221;</span><span class="comment">&#8221;&#8217;I am dying.&#8221;&#8217;</span><span> </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;%s says bye.&#8217;</span><span> % </span><span class="special">self</span><span>.name </span></span></li>
<li><span> </span></li>
<li><span> Person.population -= <span class="number">1</span><span> </span></span></li>
<li><span> </span></li>
<li><span> <span class="keyword">if</span><span> Person.population == </span><span class="number">0</span><span>: </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;I am the last one.&#8217;</span><span> </span></span></li>
<li><span> <span class="keyword">else</span><span>: </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;There are still %d people left.&#8217;</span><span> % Person.population </span></span></li>
<li><span> </span></li>
<li><span> <span class="keyword">def</span><span> sayHi(</span><span class="special">self</span><span>): </span></span></li>
<li><span> <span class="string">&#8221;</span><span class="comment">&#8221;&#8217;Greeting by the person.</span> </span></li>
<li><span> </span></li>
<li><span><span class="comment"> Really, that&#8217;s all it does.&#8221;&#8217;</span><span> </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;Hi, my name is %s.&#8217;</span><span> % </span><span class="special">self</span><span>.name </span></span></li>
<li><span> </span></li>
<li><span> <span class="keyword">def</span><span> howMany(</span><span class="special">self</span><span>): </span></span></li>
<li><span> <span class="string">&#8221;</span><span class="comment">&#8221;&#8217;Prints the current population.&#8221;&#8217;</span><span> </span></span></li>
<li><span> <span class="keyword">if</span><span> Person.population == </span><span class="number">1</span><span>: </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;I am the only person here.&#8217;</span><span> </span></span></li>
<li><span> <span class="keyword">else</span><span>: </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;We have %d persons here.&#8217;</span><span> % Person.population </span></span></li>
<li><span> </span></li>
<li><span>swaroop = Person(<span class="string">&#8216;Swaroop&#8217;</span><span>) </span></span></li>
<li><span>swaroop.sayHi() </span></li>
<li><span>swaroop.howMany() </span></li>
<li><span> </span></li>
<li><span>kalam = Person(<span class="string">&#8216;Abdul Kalam&#8217;</span><span>) </span></span></li>
<li><span>kalam.sayHi() </span></li>
<li><span>kalam.howMany() </span></li>
<li><span> </span></li>
<li><span>swaroop.sayHi() </span></li>
<li><span>swaroop.howMany() </span></li>
</ol>
</div>
<pre class="python" style="display: none;">class Person:
    '''Represents a person.'''
    population = 0 #类变量

    def __init__(self, name):
        '''Initializes the person's data.'''
        self.name = name
        print '(Initializing %s)' % self.name
        #When this person is created, he/she adds to the population
        Person.population += 1

    def __del__(self):
        '''I am dying.'''
        print '%s says bye.' % self.name

        Person.population -= 1

        if Person.population == 0:
            print 'I am the last one.'
        else:
            print 'There are still %d people left.' % Person.population

    def sayHi(self):
        '''Greeting by the person.

        Really, that's all it does.'''
        print 'Hi, my name is %s.' % self.name

    def howMany(self):
        '''Prints the current population.'''
        if Person.population == 1:
            print 'I am the only person here.'
        else:
            print 'We have %d persons here.' % Person.population

swaroop = Person('Swaroop')
swaroop.sayHi()
swaroop.howMany()

kalam = Person('Abdul Kalam')
kalam.sayHi()
kalam.howMany()

swaroop.sayHi()
swaroop.howMany()</pre>
<p>当某个对象对类的变量做了改动的时候，这个改动会反映到所有其他的实例上。<br />
对象的变量:由类的每个对象/实例拥有。因此每个对象有自己对这个域的一份拷贝，即它们不是共享的，在同一个类的不同实例中，虽然对象的变量有相同的名称，但是是互不相关的。</p>
<p>注：<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>中所有的类成员（包括数据成员）都是 公共的 ，所有的方法都是有效的 。<br />
6.5    继承</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=class%20SchoolMember%3A%0A%20%20%20%20'''Represents%20any%20school%20member.'''%0A%20%20%20%20def%20__init__(self%2C%20name%2C%20age)%3A%0A%20%20%20%20%20%20%20%20self.name%20%3D%20name%0A%20%20%20%20%20%20%20%20self.age%20%3D%20age%0A%20%20%20%20%20%20%20%20print%20'(Initialized%20SchoolMember%3A%20%25s)'%20%25%20self.name%0A%0A%20%20%20%20def%20tell(self)%3A%0A%20%20%20%20%20%20%20%20'''Tell%20my%20details.'''%0A%20%20%20%20%20%20%20%20print%20'Name%3A%22%25s%22%20Age%3A%22%25s%22'%20%25%20(self.name%2C%20self.age)%2C%0A%0Aclass%20Teacher(SchoolMember)%3A%20%23%E7%BB%A7%E6%89%BF%E8%87%AASchoolMember%E7%B1%BB%0A%20%20%20%20'''Represents%20a%20teacher.'''%0A%20%20%20%20def%20__init__(self%2C%20name%2C%20age%2C%20salary)%3A%0A%20%20%20%20%20%20%20%20SchoolMember.__init__(self%2C%20name%2C%20age)%0A%20%20%20%20%20%20%20%20self.salary%20%3D%20salary%0A%20%20%20%20%20%20%20%20print%20'(Initialized%20Teacher%3A%20%25s)'%20%25%20self.name%0A%0A%20%20%20%20def%20tell(self)%3A%0A%20%20%20%20%20%20%20%20SchoolMember.tell(self)%0A%20%20%20%20%20%20%20%20print%20'Salary%3A%20%22%25d%22'%20%25%20self.salary%0A%0Aclass%20Student(SchoolMember)%3A%0A%20%20%20%20'''Represents%20a%20student.'''%0A%20%20%20%20def%20__init__(self%2C%20name%2C%20age%2C%20marks)%3A%0A%20%20%20%20%20%20%20%20SchoolMember.__init__(self%2C%20name%2C%20age)%0A%20%20%20%20%20%20%20%20self.marks%20%3D%20marks%0A%20%20%20%20%20%20%20%20print%20'(Initialized%20Student%3A%20%25s)'%20%25%20self.name%0A%0A%20%20%20%20def%20tell(self)%3A%0A%20%20%20%20%20%20%20%20SchoolMember.tell(self)%0A%20%20%20%20%20%20%20%20print%20'Marks%3A%20%22%25d%22'%20%25%20self.marks%0A%0At%20%3D%20Teacher('Mrs.%20Shrividya'%2C%2040%2C%2030000)%0As%20%3D%20Student('Swaroop'%2C%2022%2C%2075)%0A%0Aprint%20%23%20prints%20a%20blank%20line%0A%0Amembers%20%3D%20%5Bt%2C%20s%5D%0Afor%20member%20in%20members%3A%0A%20%20%20%20member.tell()%20%23%20works%20for%20both%20Teachers%20and%20Students" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">class</span><span> SchoolMember: </span></span></li>
<li><span> <span class="string">&#8221;</span><span class="comment">&#8221;&#8217;Represents any school member.&#8221;&#8217;</span><span> </span></span></li>
<li><span> <span class="keyword">def</span><span> __init__(</span><span class="special">self</span><span>, name, age): </span></span></li>
<li><span> <span class="special">self</span><span>.name = name </span></span></li>
<li><span> <span class="special">self</span><span>.age = age </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;(Initialized SchoolMember: %s)&#8217;</span><span> % </span><span class="special">self</span><span>.name </span></span></li>
<li><span> </span></li>
<li><span> <span class="keyword">def</span><span> tell(</span><span class="special">self</span><span>): </span></span></li>
<li><span> <span class="string">&#8221;</span><span class="comment">&#8221;&#8217;Tell my details.&#8221;&#8217;</span><span> </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;Name:&#8221;%s&#8221; Age:&#8221;%s&#8221;&#8216;</span><span> % (</span><span class="special">self</span><span>.name, </span><span class="special">self</span><span>.age), </span></span></li>
<li><span> </span></li>
<li><span><span class="keyword">class</span><span> Teacher(SchoolMember): </span><span class="comment">#继承自SchoolMember类</span><span> </span></span></li>
<li><span> <span class="string">&#8221;</span><span class="comment">&#8221;&#8217;Represents a teacher.&#8221;&#8217;</span><span> </span></span></li>
<li><span> <span class="keyword">def</span><span> __init__(</span><span class="special">self</span><span>, name, age, salary): </span></span></li>
<li><span> SchoolMember.__init__(<span class="special">self</span><span>, name, age) </span></span></li>
<li><span> <span class="special">self</span><span>.salary = salary </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;(Initialized Teacher: %s)&#8217;</span><span> % </span><span class="special">self</span><span>.name </span></span></li>
<li><span> </span></li>
<li><span> <span class="keyword">def</span><span> tell(</span><span class="special">self</span><span>): </span></span></li>
<li><span> SchoolMember.tell(<span class="special">self</span><span>) </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;Salary: &#8221;%d&#8221;&#8216;</span><span> % </span><span class="special">self</span><span>.salary </span></span></li>
<li><span> </span></li>
<li><span><span class="keyword">class</span><span> Student(SchoolMember): </span></span></li>
<li><span> <span class="string">&#8221;</span><span class="comment">&#8221;&#8217;Represents a student.&#8221;&#8217;</span><span> </span></span></li>
<li><span> <span class="keyword">def</span><span> __init__(</span><span class="special">self</span><span>, name, age, marks): </span></span></li>
<li><span> SchoolMember.__init__(<span class="special">self</span><span>, name, age) </span></span></li>
<li><span> <span class="special">self</span><span>.marks = marks </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;(Initialized Student: %s)&#8217;</span><span> % </span><span class="special">self</span><span>.name </span></span></li>
<li><span> </span></li>
<li><span> <span class="keyword">def</span><span> tell(</span><span class="special">self</span><span>): </span></span></li>
<li><span> SchoolMember.tell(<span class="special">self</span><span>) </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;Marks: &#8221;%d&#8221;&#8216;</span><span> % </span><span class="special">self</span><span>.marks </span></span></li>
<li><span> </span></li>
<li><span>t = Teacher(<span class="string">&#8216;Mrs. Shrividya&#8217;</span><span>, </span><span class="number">40</span><span>, </span><span class="number">30000</span><span>) </span></span></li>
<li><span>s = Student(<span class="string">&#8216;Swaroop&#8217;</span><span>, </span><span class="number">22</span><span>, </span><span class="number">75</span><span>) </span></span></li>
<li><span> </span></li>
<li><span><span class="keyword">print</span><span> </span><span class="comment"># prints a blank line</span><span> </span></span></li>
<li><span> </span></li>
<li><span>members = [t, s] </span></li>
<li><span><span class="keyword">for</span><span> member </span><span class="keyword">in</span><span> members: </span></span></li>
<li><span> member.tell() <span class="comment"># works for both Teachers and Students</span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">class SchoolMember:
    '''Represents any school member.'''
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print '(Initialized SchoolMember: %s)' % self.name

    def tell(self):
        '''Tell my details.'''
        print 'Name:"%s" Age:"%s"' % (self.name, self.age),

class Teacher(SchoolMember): #继承自SchoolMember类
    '''Represents a teacher.'''
    def __init__(self, name, age, salary):
        SchoolMember.__init__(self, name, age)
        self.salary = salary
        print '(Initialized Teacher: %s)' % self.name

    def tell(self):
        SchoolMember.tell(self)
        print 'Salary: "%d"' % self.salary

class Student(SchoolMember):
    '''Represents a student.'''
    def __init__(self, name, age, marks):
        SchoolMember.__init__(self, name, age)
        self.marks = marks
        print '(Initialized Student: %s)' % self.name

    def tell(self):
        SchoolMember.tell(self)
        print 'Marks: "%d"' % self.marks

t = Teacher('Mrs. Shrividya', 40, 30000)
s = Student('Swaroop', 22, 75)

print # prints a blank line

members = [t, s]
for member in members:
    member.tell() # works for both Teachers and Students</pre>
<p>第7章    输入与输出<br />
7.1    文件</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=poem%20%3D%20'''%5C%0AProgramming%20is%20fun%0AWhen%20the%20work%20is%20done%0Aif%20you%20wanna%20make%20your%20work%20also%20fun%3A%0A%20%20%20%20use%20Python!%0A'''%0A%0Af%20%3D%20file('poem.txt'%2C%20'w')%20%23%20open%20for%20writing%0Af.write(poem)%20%23%20write%20text%20to%20file%0Af.close()%20%23%20close%20the%20file%0A%0Af%20%3D%20file('poem.txt')%0A%23%20if%20no%20mode%20is%20specified%2Cread%20mode%20is%20assumed%20by%20default%0Awhile%20True%3A%0A%20%20%20%20line%20%3D%20f.readline()%0A%20%20%20%20if%20len(line)%20%3D%3D%200%3A%20%23%20Zero%20length%20indicates%20EOF%0A%20%20%20%20%20%20%20%20break%0A%20%20%20%20print%20line%2C%0A%20%20%20%20%23%20Notice%20comma%20to%20avoid%20automatic%20newline%20added%20by%20Python%0Af.close()%20%23%20close%20the%20file" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span>poem = </span><span class="string">&#8221;</span><span class="comment">&#8221;&#8217;\</span> </span></li>
<li><span><span class="comment">Programming is fun</span> </span></li>
<li><span><span class="comment">When the work is done</span> </span></li>
<li><span><span class="comment">if you wanna make your work also fun:</span> </span></li>
<li><span><span class="comment"> use <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>!</span> </span></li>
<li><span><span class="comment">&#8221;&#8217;</span><span> </span></span></li>
<li><span> </span></li>
<li><span>f = file(<span class="string">&#8216;poem.txt&#8217;</span><span>, </span><span class="string">&#8216;w&#8217;</span><span>) </span><span class="comment"># open for writing</span><span> </span></span></li>
<li><span>f.write(poem) <span class="comment"># write text to file</span><span> </span></span></li>
<li><span>f.close() <span class="comment"># close the file</span><span> </span></span></li>
<li><span> </span></li>
<li><span>f = file(<span class="string">&#8216;poem.txt&#8217;</span><span>) </span></span></li>
<li><span><span class="comment"># if no mode is specified,read mode is assumed by default</span><span> </span></span></li>
<li><span><span class="keyword">while</span><span> </span><span class="special">True</span><span>: </span></span></li>
<li><span> line = f.readline() </span></li>
<li><span> <span class="keyword">if</span><span> len(line) == </span><span class="number">0</span><span>: </span><span class="comment"># Zero length indicates EOF</span><span> </span></span></li>
<li><span> <span class="keyword">break</span><span> </span></span></li>
<li><span> <span class="keyword">print</span><span> line, </span></span></li>
<li><span> <span class="comment"># Notice comma to avoid automatic newline added by <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a></span><span> </span></span></li>
<li><span>f.close() <span class="comment"># close the file</span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">poem = '''\
Programming is fun
When the work is done
if you wanna make your work also fun:
    use <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>!
'''

f = file('poem.txt', 'w') # open for writing
f.write(poem) # write text to file
f.close() # close the file

f = file('poem.txt')
# if no mode is specified,read mode is assumed by default
while True:
    line = f.readline()
    if len(line) == 0: # Zero length indicates EOF
        break
    print line,
    # Notice comma to avoid automatic newline added by <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>
f.close() # close the file</pre>
<p>7.2    存储器<br />
<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>提供一个标准的模块，称为pickle。使用它你可以在一个文件中储存任何<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>对象，之后你又可以把它完整无缺地取出来。这被称为持久地储存对象。<br />
另一个模块称为cPickle，它的功能和pickle模块完全相同，只不过它是用C语言编写的，因此要快得多（比pickle快1000倍）。你可以使用它们中的任一个，而我们在这里将使用cPickle模块。<br />
注：类似于Java的串行化和反串行化</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=import%20cPickle%20as%20p%0A%23import%20pickle%20as%20p%0A%0Ashoplistfile%20%3D%20'shoplist.data'%0A%23%20the%20name%20of%20the%20file%20where%20we%20will%20store%20the%20object%0A%0Ashoplist%20%3D%20%5B'apple'%2C%20'mango'%2C%20'carrot'%5D%0A%0A%23%20Write%20to%20the%20file%0Af%20%3D%20file(shoplistfile%2C%20'w')%0Ap.dump(shoplist%2C%20f)%20%23%20dump%20the%20object%20to%20a%20file%0Af.close()%0A%0Adel%20shoplist%20%23%20remove%20the%20shoplist%0A%0A%23%20Read%20back%20from%20the%20storage%0Af%20%3D%20file(shoplistfile)%0Astoredlist%20%3D%20p.load(f)%0Aprint%20storedlist" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">import</span><span> cPickle as p </span></span></li>
<li><span><span class="comment">#import pickle as p</span><span> </span></span></li>
<li><span> </span></li>
<li><span>shoplistfile = <span class="string">&#8217;shoplist.data&#8217;</span><span> </span></span></li>
<li><span><span class="comment"># the name of the file where we will store the object</span><span> </span></span></li>
<li><span> </span></li>
<li><span>shoplist = [<span class="string">'apple'</span><span>, </span><span class="string">'mango'</span><span>, </span><span class="string">'carrot'</span><span>] </span></span></li>
<li><span> </span></li>
<li><span><span class="comment"># Write to the file</span><span> </span></span></li>
<li><span>f = file(shoplistfile, <span class="string">&#8216;w&#8217;</span><span>) </span></span></li>
<li><span>p.dump(shoplist, f) <span class="comment"># dump the object to a file</span><span> </span></span></li>
<li><span>f.close() </span></li>
<li><span> </span></li>
<li><span><span class="keyword">del</span><span> shoplist </span><span class="comment"># remove the shoplist</span><span> </span></span></li>
<li><span> </span></li>
<li><span><span class="comment"># Read back from the storage</span><span> </span></span></li>
<li><span>f = file(shoplistfile) </span></li>
<li><span>storedlist = p.load(f) </span></li>
<li><span><span class="keyword">print</span><span> storedlist </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">import cPickle as p
#import pickle as p

shoplistfile = 'shoplist.data'
# the name of the file where we will store the object

shoplist = ['apple', 'mango', 'carrot']

# Write to the file
f = file(shoplistfile, 'w')
p.dump(shoplist, f) # dump the object to a file
f.close()

del shoplist # remove the shoplist

# Read back from the storage
f = file(shoplistfile)
storedlist = p.load(f)
print storedlist</pre>
<p>第8章    异常<br />
8.1    Try/Exception</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=import%20sys%0A%0Atry%3A%0A%20%20%20%20s%20%3D%20raw_input('Enter%20something%20--%3E%20')%0Aexcept%20EOFError%3A%0A%20%20%20%20print%20'%5CnWhy%20did%20you%20do%20an%20EOF%20on%20me%3F'%0A%20%20%20%20sys.exit()%20%23%20exit%20the%20program%0Aexcept%3A%0A%20%20%20%20print%20'%5CnSome%20error%2Fexception%20occurred.'%0A%20%20%20%0Aprint%20'Done'" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">import</span><span> sys </span></span></li>
<li><span> </span></li>
<li><span><span class="keyword">try</span><span>: </span></span></li>
<li><span> s = raw_input(<span class="string">&#8216;Enter something &#8211;&gt; &#8217;</span><span>) </span></span></li>
<li><span><span class="keyword">except</span><span> EOFError: </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;\nWhy did you do an EOF on me?&#8217;</span><span> </span></span></li>
<li><span> sys.exit() <span class="comment"># exit the program</span><span> </span></span></li>
<li><span><span class="keyword">except</span><span>: </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;\nSome error/exception occurred.&#8217;</span><span> </span></span></li>
<li><span> </span></li>
<li><span><span class="keyword">print</span><span> </span><span class="string">&#8216;Done&#8217;</span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">import sys

try:
    s = raw_input('Enter something --&gt; ')
except EOFError:
    print '\nWhy did you do an EOF on me?'
    sys.exit() # exit the program
except:
    print '\nSome error/exception occurred.'

print 'Done'</pre>
<p>8.2    引发异常 Raise</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=class%20ShortInputException(Exception)%3A%0A%20%20%20%20'''A%20user-defined%20exception%20class.'''%0A%20%20%20%20def%20__init__(self%2C%20length%2C%20atleast)%3A%0A%20%20%20%20%20%20%20%20Exception.__init__(self)%0A%20%20%20%20%20%20%20%20self.length%20%3D%20length%0A%20%20%20%20%20%20%20%20self.atleast%20%3D%20atleast%0A%0Atry%3A%0A%20%20%20%20s%20%3D%20raw_input('Enter%20something%20--%3E%20')%0A%20%20%20%20if%20len(s)%20%3C%203%3A%0A%20%20%20%20%20%20%20%20raise%20ShortInputException(len(s)%2C%203)%20%23%E6%8A%9B%E5%87%BA%E5%BC%82%E5%B8%B8%0A%20%20%20%20%23%20Other%20work%20can%20continue%20as%20usual%20here%0Aexcept%20EOFError%3A%0A%20%20%20%20print%20'%5CnWhy%20did%20you%20do%20an%20EOF%20on%20me%3F'%0Aexcept%20ShortInputException%2C%20x%3A%0A%20%20%20%20print%20'ShortInputException%3A%20The%20input%20was%20of%20length%20%25d%2C%20%5C%0Awas%20expecting%20at%20least%20%25d'%20%25%20(x.length%2C%20x.atleast)%0Aelse%3A%0A%20%20%20%20print%20'No%20exception%20was%20raised.'" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">class</span><span> ShortInputException(Exception): </span></span></li>
<li><span> <span class="string">&#8221;</span><span class="comment">&#8221;&#8217;A user-defined exception class.&#8221;&#8217;</span><span> </span></span></li>
<li><span> <span class="keyword">def</span><span> __init__(</span><span class="special">self</span><span>, length, atleast): </span></span></li>
<li><span> Exception.__init__(<span class="special">self</span><span>) </span></span></li>
<li><span> <span class="special">self</span><span>.length = length </span></span></li>
<li><span> <span class="special">self</span><span>.atleast = atleast </span></span></li>
<li><span> </span></li>
<li><span><span class="keyword">try</span><span>: </span></span></li>
<li><span> s = raw_input(<span class="string">&#8216;Enter something &#8211;&gt; &#8217;</span><span>) </span></span></li>
<li><span> <span class="keyword">if</span><span> len(s) &lt; </span><span class="number">3</span><span>: </span></span></li>
<li><span> <span class="keyword">raise</span><span> ShortInputException(len(s), </span><span class="number">3</span><span>) </span><span class="comment">#抛出异常</span><span> </span></span></li>
<li><span> <span class="comment"># Other work can continue as usual here</span><span> </span></span></li>
<li><span><span class="keyword">except</span><span> EOFError: </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;\nWhy did you do an EOF on me?&#8217;</span><span> </span></span></li>
<li><span><span class="keyword">except</span><span> ShortInputException, x: </span></span></li>
<li><span> <span class="keyword">print</span><span> &#8216;ShortInputException: The input was of length %d, \ </span></span></li>
<li><span>was expecting at least %d&#8217; % (x.length, x.atleast) </span></li>
<li><span><span class="keyword">else</span><span>: </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;No exception was raised.&#8217;</span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">class ShortInputException(Exception):
    '''A user-defined exception class.'''
    def __init__(self, length, atleast):
        Exception.__init__(self)
        self.length = length
        self.atleast = atleast

try:
    s = raw_input('Enter something --&gt; ')
    if len(s) &lt; 3:
        raise ShortInputException(len(s), 3) #抛出异常
    # Other work can continue as usual here
except EOFError:
    print '\nWhy did you do an EOF on me?'
except ShortInputException, x:
    print 'ShortInputException: The input was of length %d, \
was expecting at least %d' % (x.length, x.atleast)
else:
    print 'No exception was raised.'</pre>
<p>注：类似于Java的throw抛出异常</p>
<p>8.3    Try/Exception/Finally</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=import%20time%0A%0Atry%3A%0A%20%20%20%20f%20%3D%20file('poem.txt')%0A%20%20%20%20while%20True%3A%20%23%20our%20usual%20file-reading%20idiom%0A%20%20%20%20%20%20%20%20line%20%3D%20f.readline()%0A%20%20%20%20%20%20%20%20if%20len(line)%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20%20%20%20%20time.sleep(2)%0A%20%20%20%20%20%20%20%20print%20line%2C%0Afinally%3A%0A%20%20%20%20f.close()%0A%20%20%20%20print%20'Cleaning%20up...closed%20the%20file'" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">import</span><span> time </span></span></li>
<li><span> </span></li>
<li><span><span class="keyword">try</span><span>: </span></span></li>
<li><span> f = file(<span class="string">&#8216;poem.txt&#8217;</span><span>) </span></span></li>
<li><span> <span class="keyword">while</span><span> </span><span class="special">True</span><span>: </span><span class="comment"># our usual file-reading idiom</span><span> </span></span></li>
<li><span> line = f.readline() </span></li>
<li><span> <span class="keyword">if</span><span> len(line) == </span><span class="number">0</span><span>: </span></span></li>
<li><span> <span class="keyword">break</span><span> </span></span></li>
<li><span> time.sleep(<span class="number">2</span><span>) </span></span></li>
<li><span> <span class="keyword">print</span><span> line, </span></span></li>
<li><span><span class="keyword">finally</span><span>: </span></span></li>
<li><span> f.close() </span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;Cleaning up&#8230;closed the file&#8217;</span><span> </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">import time

try:
    f = file('poem.txt')
    while True: # our usual file-reading idiom
        line = f.readline()
        if len(line) == 0:
            break
        time.sleep(2)
        print line,
finally:
    f.close()
    print 'Cleaning up...closed the file'</pre>
<p>第9章    <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>标准库<br />
9.1    Sys模块<br />
Sys模块包含系统对应的功能。</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=import%20sys%0A%0Adef%20readfile(filename)%3A%0A%20%20%20%20'''Print%20a%20file%20to%20the%20standard%20output.'''%0A%20%20%20%20f%20%3D%20file(filename)%0A%20%20%20%20while%20True%3A%0A%20%20%20%20%20%20%20%20line%20%3D%20f.readline()%0A%20%20%20%20%20%20%20%20if%20len(line)%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20%20%20%20%20print%20line%2C%20%23%20notice%20comma%0A%20%20%20%20f.close()%0A%0A%23%20Script%20starts%20from%20here%0Aif%20len(sys.argv)%20%3C%202%3A%0A%20%20%20%20print%20'No%20action%20specified.'%0A%20%20%20%20sys.exit()%0A%0Aif%20sys.argv%5B1%5D.startswith('--')%3A%0A%20%20%20%20option%20%3D%20sys.argv%5B1%5D%5B2%3A%5D%0A%20%20%20%20%23%20fetch%20sys.argv%5B1%5D%20but%20without%20the%20first%20two%20characters%0A%20%20%20%20if%20option%20%3D%3D%20'version'%3A%0A%20%20%20%20%20%20%20%20print%20'Version%201.2'%0A%20%20%20%20elif%20option%20%3D%3D%20'help'%3A%0A%20%20%20%20%20%20%20%20print%20'''%5C%0AThis%20program%20prints%20files%20to%20the%20standard%20output.%0AAny%20number%20of%20files%20can%20be%20specified.%0AOptions%20include%3A%0A%20%20--version%20%3A%20Prints%20the%20version%20number%0A%20%20--help%20%20%20%20%3A%20Display%20this%20help'''%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20print%20'Unknown%20option.'%0A%20%20%20%20sys.exit()%0Aelse%3A%0A%20%20%20%20for%20filename%20in%20sys.argv%5B1%3A%5D%3A%0A%20%20%20%20%20%20%20%20readfile(filename)" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">import</span><span> sys </span></span></li>
<li><span> </span></li>
<li><span><span class="keyword">def</span><span> readfile(filename): </span></span></li>
<li><span> <span class="string">&#8221;</span><span class="comment">&#8221;&#8217;Print a file to the standard output.&#8221;&#8217;</span><span> </span></span></li>
<li><span> f = file(filename) </span></li>
<li><span> <span class="keyword">while</span><span> </span><span class="special">True</span><span>: </span></span></li>
<li><span> line = f.readline() </span></li>
<li><span> <span class="keyword">if</span><span> len(line) == </span><span class="number">0</span><span>: </span></span></li>
<li><span> <span class="keyword">break</span><span> </span></span></li>
<li><span> <span class="keyword">print</span><span> line, </span><span class="comment"># notice comma</span><span> </span></span></li>
<li><span> f.close() </span></li>
<li><span> </span></li>
<li><span><span class="comment"># Script starts from here</span><span> </span></span></li>
<li><span><span class="keyword">if</span><span> len(sys.argv) &lt; </span><span class="number">2</span><span>: </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;No action specified.&#8217;</span><span> </span></span></li>
<li><span> sys.exit() </span></li>
<li><span> </span></li>
<li><span><span class="keyword">if</span><span> sys.argv[</span><span class="number">1</span><span>].startswith(</span><span class="string">&#8216;&#8211;&#8217;</span><span>): </span></span></li>
<li><span> option = sys.argv[<span class="number">1</span><span>][</span><span class="number">2</span><span>:] </span></span></li>
<li><span> <span class="comment"># fetch sys.argv[1] but without the first two characters</span><span> </span></span></li>
<li><span> <span class="keyword">if</span><span> option == </span><span class="string">&#8216;version&#8217;</span><span>: </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;Version 1.2&#8242;</span><span> </span></span></li>
<li><span> <span class="keyword">elif</span><span> option == </span><span class="string">&#8216;help&#8217;</span><span>: </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8221;</span><span class="comment">&#8221;&#8217;\</span> </span></li>
<li><span><span class="comment">This program prints files to the standard output.</span> </span></li>
<li><span><span class="comment">Any number of files can be specified.</span> </span></li>
<li><span><span class="comment">Options include:</span> </span></li>
<li><span><span class="comment"> &#8211;version : Prints the version number</span> </span></li>
<li><span><span class="comment"> &#8211;help    : Display this help&#8221;&#8217;</span><span> </span></span></li>
<li><span> <span class="keyword">else</span><span>: </span></span></li>
<li><span> <span class="keyword">print</span><span> </span><span class="string">&#8216;Unknown option.&#8217;</span><span> </span></span></li>
<li><span> sys.exit() </span></li>
<li><span><span class="keyword">else</span><span>: </span></span></li>
<li><span> <span class="keyword">for</span><span> filename </span><span class="keyword">in</span><span> sys.argv[</span><span class="number">1</span><span>:]: </span></span></li>
<li><span> readfile(filename) </span></li>
</ol>
</div>
<pre class="python" style="display: none;">import sys

def readfile(filename):
    '''Print a file to the standard output.'''
    f = file(filename)
    while True:
        line = f.readline()
        if len(line) == 0:
            break
        print line, # notice comma
    f.close()

# Script starts from here
if len(sys.argv) &lt; 2:
    print 'No action specified.'
    sys.exit()

if sys.argv[1].startswith('--'):
    option = sys.argv[1][2:]
    # fetch sys.argv[1] but without the first two characters
    if option == 'version':
        print 'Version 1.2'
    elif option == 'help':
        print '''\
This program prints files to the standard output.
Any number of files can be specified.
Options include:
  --version : Prints the version number
  --help    : Display this help'''
    else:
        print 'Unknown option.'
    sys.exit()
else:
    for filename in sys.argv[1:]:
        readfile(filename)</pre>
<p>9.2    OS模块<br />
这个模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话，这个模块是尤为重要的。即它允许一个程序在编写后不需要任何改动，也不会发生任何问题，就可以在Linux和Windows下运行。</p>
<p>常用的函数如下：<br />
<strong>os.name字符串指示你正在使用的平台。比如对于Windows，它是&#8217;nt&#8217;，而对于Linux/Unix用户，它是&#8217;posix&#8217;。<br />
os.getcwd()函数得到当前工作目录，即当前<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>脚本工作的目录路径。<br />
os.getenv()和os.putenv()函数分别用来读取和设置环境变量。<br />
os.listdir()返回指定目录下的所有文件和目录名。<br />
os.remove()函数用来删除一个文件。<br />
os.system()函数用来运行shell命令。<br />
os.linesep字符串给出当前平台使用的行终止符。例如，Windows使用&#8217;\r\n&#8217;，Linux使用&#8217;\n&#8217;而Mac使用&#8217;\r&#8217;。<br />
os.path.split()函数返回一个路径的目录名和文件名。</strong></p>
<p>第10章    <a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>常用技巧<br />
10.1    特殊方法<br />
<strong>__init__(self,&#8230;) 这个方法在新建对象恰好要被返回使用之前被调用。<br />
__del__(self) 恰好在对象要被删除之前调用。<br />
__str__(self) 在我们对对象使用print语句或是使用str()的时候调用。<br />
__lt__(self,other) 当使用 小于 运算符（&lt;）的时候调用。类似地，对于所有的运算符（+，&gt;等等）都有特殊的方法。<br />
__getitem__(self,key) 使用x[key]索引操作符的时候调用。<br />
__len__(self) 对序列对象使用内建的len()函数的时候调用。<br />
</strong><br />
10.2    Lambda形式<br />
lambda语句被用来创建新的函数对象，并且在运行时返回它们。个人感觉lambda有点像函数指针。</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=def%20make_repeater(n)%3A%0A%20%20%20%20return%20lambda%20s%3A%20s%20*%20n%0A%0Atwice%20%3D%20make_repeater(2)%20%20%23%E5%B0%86make_repeater%E8%B5%8B%E5%80%BC%E7%BB%99%E5%8F%98%E9%87%8Ftwice%0A%0Aprint%20twice('word')%20%23%E8%B0%83%E7%94%A8make_reoeater%E5%87%BD%E6%95%B0%0Aprint%20twice(5)" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">def</span><span> make_repeater(n): </span></span></li>
<li><span> <span class="keyword">return</span><span> </span><span class="keyword">lambda</span><span> s: s * n </span></span></li>
<li><span> </span></li>
<li><span>twice = make_repeater(<span class="number">2</span><span>) </span><span class="comment">#将make_repeater赋值给变量twice</span><span> </span></span></li>
<li><span> </span></li>
<li><span><span class="keyword">print</span><span> twice(</span><span class="string">&#8216;word&#8217;</span><span>) </span><span class="comment">#调用make_reoeater函数</span><span> </span></span></li>
<li><span><span class="keyword">print</span><span> twice(</span><span class="number">5</span><span>) </span></span></li>
</ol>
</div>
<pre class="python" style="display: none;">def make_repeater(n):
    return lambda s: s * n

twice = make_repeater(2)  #将make_repeater赋值给变量twice

print twice('word') #调用make_reoeater函数
print twice(5)</pre>
<p>10.3    Exec/Eval<br />
exec语句用来执行储存在字符串或文件中的<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>语句。<br />
eval语句用来计算存储在字符串中的有效<a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>表达式。</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.iwanna.cn/tags/python/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Python">Python</a>代码 <object width="14" height="15" data="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash"><param name="flashvars" value="clipboard=exec%20'print%20%22Hello%20World%22'%0Aeval%20('2*3')%0A" /><param name="src" value="http://wangtong40.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" /><param name="quality" value="high" /></object></div>
</div>
<ol class="dp-py">
<li><span><span class="keyword">exec</span><span> </span><span class="string">&#8216;print &#8221;Hello World&#8221;&#8216;</span><span> </span></span></li>
<li><span>eval (<span class="string">&#8216;2*3&#8242;</span><span>)<br />
</span></span></li>
</ol>
</div>
<hr />
<p>© <a href="http://www.iwanna.cn">我想网</a> Akon 所有 , 2009. |
<a href="http://www.iwanna.cn/archives/2009/04/17/479/">永久链接</a> |
<a href="http://www.iwanna.cn/archives/2009/04/17/479/#comments">没有评论</a> |
提交到
<a rel="nofollow" target="_blank" href="http://www.google.com/reader/view/feed/http://www.iwanna.cn/archives/2009/04/17/479/">Google Reader</a>
<a rel="nofollow" target="_blank" href="http://www.xianguo.com/subscribe.php?url=http://www.iwanna.cn/archives/2009/04/17/479/">鲜果</a>
<a rel="nofollow" target="_blank" href="http://www.zhuaxia.com/add_channel.php?url=http://www.iwanna.cn/archives/2009/04/17/479/">抓虾</a>
<hr />
</p>
	标签：<a href="http://www.iwanna.cn/topics/develope/python/" title="Python" rel="tag nofollow">Python</a>, <a href="http://www.iwanna.cn/tags/python/" title="Python" rel="tag nofollow">Python</a><br />

	<h2 class="related_post">您可能会感兴趣的其他文章</h2>
	<ul class="st-related-posts">
	<li><a href="http://www.iwanna.cn/archives/2010/06/11/3900/" title="国外PHP开发者放弃PHP而改用Python (2010年06月11日)">国外PHP开发者放弃PHP而改用Python</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/07/13/4513/" title="一个显示排序过程的Python脚本 (2010年07月13日)">一个显示排序过程的Python脚本</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/05/02/2904/" title="QCon北京报道：豆瓣首席架构师洪强宁谈Python语言 (2010年05月2日)">QCon北京报道：豆瓣首席架构师洪强宁谈Python语言</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/04/3681/" title="Python程序员的进化 (2010年06月4日)">Python程序员的进化</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/04/3670/" title="python中的编码 (2010年06月4日)">python中的编码</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/06/24/4177/" title="Python 语言快速入门教学 (2010年06月24日)">Python 语言快速入门教学</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/05/06/959/" title="Python 3 系列教程 &#8211; developerWorks 中国 (2009年05月6日)">Python 3 系列教程 &#8211; developerWorks 中国</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2009/11/17/2385/" title="Google将限制Python语言的应用 开发社区热议 (2009年11月17日)">Google将限制Python语言的应用 开发社区热议</a> </li>
	<li><a href="http://www.iwanna.cn/archives/2010/02/03/2483/" title="10个免费开源微博客程序 (2010年02月3日)">10个免费开源微博客程序</a> </li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iwanna.cn/archives/2009/04/17/479/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
