接触的语言越多,对语言的偏执就越少,越来越明白语言只是一种解决问题的工具 - 核心永远是问题与解决问题的思路。
我的体验,从简练程度上来讲,shell脚本优于perl/python/lua,perl/python优于java/C++,所以能用前者解决的问题,就别用后者。
项目中用到python,前段时间就“系统”的学了下python - 主要也就是把官方的tutorial过了一遍,从学习python的资料来看,我的评价是:
- Python Tutorial(), 简洁而重点突出,绝对是上品,把这个快速的过一篇,例子全部敲一遍,想说没入门都难。另外这里()download下来的,还有关于函数式编程,网络编程,argparse的专题,都是10来页的,读读挺不错
- Learn python the hard way,这个去年过年的时候拷到ipad上读过几页,绝对是给没有编程经验的人看的,如果你是个程序员,相信全篇读下来你会被啰嗦死的 - 别降格去读这个了。
- Learn Python,上千页的大部头,看着就有压力,要是没事就别浪费时间读了,边做边查reference吧。
另外,python提供了绝佳的交互式环境:
$ pythonPython 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> import os>>> dir(os)['F_OK', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM', 'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY', 'O_TEXT', 'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO', 'P_OVERLAY', 'P_WAIT', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'UserDict', 'W_OK', 'X_OK', '_Environ', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_copy_reg', '_execvpe', '_exists', '_exit', '_get_exports_list', '_make_stat_result', '_make_statvfs_result', '_pickle_stat_result', '_pickle_statvfs_result', 'abort', 'access', 'altsep', 'chdir', 'chmod', 'close', 'closerange', 'curdir', 'defpath', 'devnull', 'dup', 'dup2', 'environ', 'errno', 'error', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fdopen', 'fstat', 'fsync', 'getcwd', 'getcwdu', 'getenv', 'getpid', 'isatty', 'kill', 'linesep', 'listdir', 'lseek', 'lstat', 'makedirs', 'mkdir', 'name', 'open', 'pardir', 'path', 'pathsep', 'pipe', 'popen', 'popen2', 'popen3', 'popen4', 'putenv', 'read', 'remove', 'removedirs', 'rename', 'renames', 'rmdir', 'sep', 'spawnl', 'spawnle', 'spawnv', 'spawnve', 'startfile', 'stat', 'stat_float_times', 'stat_result', 'statvfs_result', 'strerror', 'sys', 'system', 'tempnam', 'times', 'tmpfile', 'tmpnam', 'umask', 'unlink', 'unsetenv', 'urandom', 'utime', 'waitpid', 'walk', 'write']>>> help(os.tmpfile)Help on built-in function tmpfile in module nt:tmpfile(...) tmpfile() -> file object Create a temporary file with no directory entries.>>> print os.tmpfile()', mode 'w+b' at 0x02580CD8>
在python交互环境中,dir查找成员,help看成员的帮助文档,然是直接在命令行测试这个api ---- 一气呵成!
下面谈谈就根据我对python粗浅的了解,所感受到的其亮点:
- 极佳的命令行交互体验,实时测试:见上
- 函数式编程的工具:filter + map + reduce: filter(lambda x: x > 10, range(1,20))
- list comprehension:[x for x in range(1,10) if x % 2 == 0]
- 多变量赋值:a, b = b, a
- lambda: lambda x: x > 10
- for和try的else支持 - 在其他语言里这个都得另外加flag实现,相当不便。
- 内置的documentation strings支持: """ This is a documentation string """
- generator-pull模式:需要时才产生: xrange()
- chained comparation: a < b == c
- 模块机制:module - package
- 标准的异常机制:try-except-finally; with statement
- 内置的强大集合类:list, tuple, set, dict
- 完善的标准库