Python学习经验谈:版本、IDE选择及编码解决方案
话说目前三种常见动态语言Ruby, Lua, Python我竟然都接触过了,用下来发现还是Python比较有趣
"Battery Included“的确不是盖的,各种功能的库一应俱全,几行代码就能完成神奇的功能。以下介绍学习Python以来的一些感想跟经验,希望对想要学习Python或者和我一样的Python初级入门者能有所帮助
另外强调下本文全部讲的是Windows平台下的事情…
Python学习经验1.选择Python版本和发行版
Python目前的主流版本很丰富,2.5,2.6和新的3.0都有人用。那么到底该装哪个版本好呢?
经过一段时间的使用我强烈的意识到目前的情况下(今天是09年5月24日),绝对是2.5版比较合适。
主要是因为非常多的第三方库目前只有对应2.5的简单安装包。虽然理论上2.5下能用的库2.6也肯定没问题,但是实际上总有各种各样的问题。例如pyinstaller到现在也是只支持2.5。在这个问题上我可以非常坚定的讲:装2.5肯定没错,你以后会因为这个感谢我的。
Windows下是没有自带Python的,那么选择一个发行版是必须的。
常见的发行版有Python.org的官方的发行版,ActiveState的ActivePython这两个。
之前我一直装的是后面ActiveState的哪一个,后来因为要用到numpy,找到了这个Python(x, y)
用上这个以后我对Python的好感是更上一层楼。
这个发行版有点大(接近400mb),但是里面附带了科学计算方面的很多常用库,以及著名的PyQt 。可能有人觉得科学计算方面的库不太用的到,但像nump,scipy等一干库被很多其他库依赖,还有很多文档相关的库如sphinx没有的话也会很头痛。同时PyQt对于新手来说也是出名的难以正确配置,而python(x, y)装好了以后直接就能用,感觉非常棒。同时该发行版还附带了IDE和一些有用的工具。其中IPython完全替代了Python自带的那个难用的互动Shell。
Python自带的shell应该还是蛮常用的。那么这个IPython就相当于它的超级加强版:带彩色显示,语句自动完成,额外的常用命令等等。其中tab键自动补完非常强大。比如在上图中我输入sys. (注意有个点),然后按tab键,这时IPython会显示出sys下所有的属性和方法,这肯定就是你我朝思暮想的超级自动补全。而且应为是在互动模式下,语句是实实在在被执行的,很好理解这里的自动补全是最完整的,比单靠分析代码的方式效果好很多。
其他方面的话,Python(x, y)还附带了所有库的离线文档(看的出来都是人工整理出来的),以及Eclipse+PyDev集成(这个下面会单独讲到)。附带一个工具用于启动各个部分以及查阅文档。
其自带的Python版本正是2.5
总之,装个Python(x, y)试试看,十有八九不会后悔。
Python学习经验2.IDE的选择
我一直认为选择一个好用的IDE绝对能使编程乐趣加倍,而对我来说好的IDE最重要的一点就是代码补全和自动文档显示。我尝试过的IDE/编辑器有Komodo Edit,UliPad,Pydev最后还是选择了Pydev这个看似有点笨重的Eclipse集成。
Pydev的基本使用跟其他的差不多,在代码补全方面有点小技巧:
Pydev会自动通过代码分析来进行一定程度上的代码补全,但是很多需要运行时才能获得的信息是不能这样获得的。通过在Pydev中设置Forced Buildins来设置,能取得更好的效果。试了几次发现基本上大部分库都能获得自动补全,同时会显示docstring,效果相当不错。
具体方法如下图,在Pydev窗口中选择菜单栏Window->Preference->Pydev->Interpreter Python
如下图中,点击New,输入你需要使用的模块名字即可
总体效果绝对是同类IDE中比较好的
Python学习经验3.Python中String/Unicode的编码问题
Python中的String和Unicode都提供了decode和encode方法,让人很容易混乱,然而出现乱码和UnicodeEncodeError这种情况很让人崩溃,那么下面介绍些个人心得。
Python中的String的地位就相当与C中的char *做的字符串,储存的可以使ASCII字符串,也可以是未经处理的数据。所以String中的每一个值都像是一个char。而Unicode中则将每一个元素认为是一个真正的Unicode字符。
关于decode/encode方法。decode可以理解为decode from,由一个String调用decode方法将他自己按传入的编码名来decode成为一个Unicode串。encode可以理解为encode to,由一个Unicode 来调用encode方法将他自己按照传入的编码名来encode为一个String串。所以String就是输入输出时使用的,而Unicode则是程序内部进行处理时的东西。