Python语言

如果把高中AppleⅡ上用过的Basic算起,我用过的编程语言应该有十种以上了。

其中工作中用过的有C,C++,pascal(OP/Delphi),java,C#,basic(VB),Unix/Linux shell(awk),perl,python,PHP,javascript,所谓工作中用过的,就是我凭这些语言写的程序赚过钱的。另外自己捣鼓过的还有haskell,F#,scala,Go,D,Object-C,汇编,eiffel等,至于erlang,lisp,prolog,lua,ruby,dart等语言,那就只见过demo程序,自己没写过了。当然,像html,css,xml/xslt,bat,jsp/asp,SQL这样的语言没有被我算在编程语言里。

就我个人来说,我最喜欢Python语言和C语言。D语言看上去不错,不过没什么前途,Go语言也挺好,也许以后会多用,但是现在首先是还没出1.0版(计划2012上半年会出),而且现在Windows上的实现不行,先等会。

Python语言的好处在于表现力强,兼库多且给力。而C语言的好处在于对底层的抽象不多也不少。它们都有简洁的优点,而且不像Perl的简洁,Python代码阅读起来很容易懂,Perl的代码放几个月以后你要重新理解它的语法,会以为当时自己在写天书。

国内主要使用Python的网站中,最知名的就是豆瓣网了,豆瓣的洪强宁这篇QCon BJ 2010的幻灯片已经把Python的特点说得很多,说得很明白,也说得很好了。而至于Python学习的趣味网站,赖勇浩的这篇文章虽然是2008年的了,也是很不错的。

看幻灯片也有点花时间,下面举几个例子:

上面的几行代码看起来很直观,而且也很强大。其中第10行使用到了python的列表推导(list comprehension),第12行使用到了reduce和lambda。

Python对于我而言,工作上主要是用来做各种页面抓取和分析,确实非常舒服。有时候还会用它来做一些日常生活中的事,例如给我刚上小学的儿子出题,让他从小就知道有一个程序员老爸的优势。下面是一道组词成句的题:

还有的时候出一些随机加减题来增加他的根骨,要不就是用matplotlib来画一些图给某些商业人士看,等等。

我常用的Python包都在这里有描述,其中也包括了其他的常用软件。最常用的可能就是lxml.html库了,用来处理网页非常方便,简单的处理5行搞定:

当然,Python也有很多缺点,在中国Python讨论区里不久前还讨论了一下,就在这个帖子里。Pythoner们怨念值爆棚,比如:

  • 字符串编码。对于中国人来说,字符串编码问题永远令人头痛,因为各系统都有自己的缺省编码,各OS的终端,各OS的文件系统,各网站的网页,各数据库的编码,各代码文件的编码,各数据文件与配置文件的编码….
  • 并发与性能。CPython本身的性能有待提高,而Python的GIL众所周知,伪多线程使得Python程序无法有效地利用多核系统的优势提高性能,也许只能采用多进程模型,greenlet,gevent,stackless python等框架或PyPy等非CPython的实现了
  • 客户端发布。把Python程序发布给没有安装Python环境的用户很麻烦,虽然py2exe可用,但是非常大,而且可能有遗漏,另外GUI实现也有不少性能上的问题
  • 接口规范不一致。骆驼命名法,下横杠命名法,都小写命名法,大写开头,小写开头,看起来乱
  • 标准库有的有错,有的过时了

不过还是推荐大家多试试Python,虽然它有上述的缺点,但是作为原型开发语言,运维脚本工具,还有Web后端语言来说,都是很棒的。

PS一下,python内建一个非常简单的HTTP服务模块。如果你想临时传文件给别人,可以在文件的目录下运行python -m SimpleHTTPServer,这样就在本地建立了一个端口为8000的HTTP服务,根目录为本目录,这样用wget/curl之类的软件很快就把文件下载过来了。

再PS一下,我就用python做了一个正文提取+小说下载的软件,自我感觉还成,源代码在这里。下面是正文提取测试程序的部分运行结果:

  • 网易新闻的提取结果
  • D版小说的提取结果
  • Stack Overflow的提取结果
  • 猫扑的提取结果
  • 天涯的提取结果
  • 博客的提取结果
  • 论坛的提取结果

下面是小说下载测试程序运行的结果:

发表回复