About Python(转)

准备

版本选择

  • 第一个话题是版本选择,是为了确定一下我们从哪里开始。我们主要使用 CPython(2.7.x)—— 最常见的发行版
  • 如果有机会做 lucene / hadoop / hbase 这些 Java 界工具的相关工作,可以使用 Jython(运行于 JVM 中,Java 和 Python 的混搭),性能和易用性都不错。
  • 如果愿意深入研究 Python 实现,或者求高性能 & 好玩,可以鼓捣一下 PyPy
  • Python 3 看起来更合理,为什么没使用 Python 3? 因为下文提到的一些好玩好用的工具在 Python 3 中还没有被全面支持

编译

  • 如上所述,我们使用 CPython。常见的 C 源码安装方法: ./configure --prefix=<your-path> && make && make install

包管理 & 源

  • 包管理使用 pip。
    为什么不是 setuptools?因为无卸载
    为什么不是 virtualenv? 这个更科学,可以自己搞,但我们用 Python 多数是“玩”,不必这么严肃
    btw: 我自己使用 ArchLinux,使用操作系统自身的包管理工具(pacman & yaourt)比 Python 的貌似更方便,如果你和我一样,欢迎这样搞
  • 官方源不是被墙就是速度慢,这时我们可以自己指定源,比如指定 V2EX 的源:pip install flask -i http://pypi.v2ex.com/simple。类似的还有豆瓣、清华等源。使用的时候默默的感谢他们一下

辅助工具

  • ipython 或 bpython 或 Python 自己的 repl,用来快速的“试”代码,Python 常用函数、数据结构什么的非常符合直觉,很多东西试一下就行了~

注意事项

  • 我们的服务器是 CentOS,默认镜像中 Python 依赖工具可能不全,这会导致安装 Python 失败或者安装成功后某些标准库运行不正常,这个时候需要 yum install aaa bbb ccc 后重新编译安装一下
  • Python 在酒店搜索 & QHotel 方面主要用于辅助 Java 世界的东西和一些小工具。无人帮助 QA 和运维,需要自己保证质量
  • 以上 & 以下提到的关键词,如 pip 之类,如果此一次见,请 search google,浏览一眼官方文档,如果有时间请实际操练一下 hello world

主要应用点

数据导来导去

  • 经常会有产品经理找到开发要数据,酒店的数据来源一般有:MySQL、PostgreSQL、磁盘上日志、HDFS上日志或表
  • MySQL 的数据需要用到 Python 连接 MySQL 模块,我个人使用的是 PyMySQL,其他的还有 MySQLDB 之类的,连接 PostgreSQL 我个人使用 Pyscopg2
  • HDFS 上的表或文件一般都用 Hadoop Shell 的命令,拉取到本地形成文本文件,和本地磁盘日志等同处理
  • 导数据一般都需要 join、统计、排序什么的,这个时候要灵活运用 Python 的标准数据结构:dict、list、set 等(这一点对于初学者必须多做几次才有体会)
  • Python 处理数据在环境完备的情况下出代码很快。Python 各种数据访问模块不如 JDBC 那样一致,但是结果集可以很方便的转化成 dict,代码简洁得多
  • 如果涉及到多个 / 多种数据源,各种机器,难以申请各种互访环境,在这种条件下导数据,需要使用到下文的 Fabric

文本处理

  • 字符串处理,Python 中有很多便捷的的字符串处理方法,并且字符串本身也是 list,这方面看书读文档吧
  • 正则表达式,Python 中没有正则类型,使用的是字符串,这个和 SQL 一样,都是语言本身之外的功夫
  • json,标准库里的 json 对于一般需求(处理接口数据,自动化测试对比 ...)来说就够了,可以和 dict 互转。说这个要比 Java 中简洁几十倍并不夸张。标准库中的 json 在我看来有一点不是很方便:对于非标准的 json(属性不带双引号 or 其他 js 引擎能正确识别的情况),这种情况还是使用 nodejs 里面的命令行工具好了
  • xml,标准库里面的 ElementTree 对于一般需求来说就够了,我们这里在接口方面一般不使用 XML,XML 一般用在(热发布)配置文件。和 XML 有关的 bug、故障、delay 因素什么的已经有好几起了,因此,对于开发来说,熟练的掌握这个是必要的,可以用来生成配置文件数据、检查节点和数据完整性、检查编码、查找替换等
  • 自然语言处理,用 Python 写个 trie 只需数十行代码,用来做个简单的词典分词、转拼音什么的很方便。NLP 这方面话题比较大,有专门的书介绍这个,以后有机会共同学习

运维

  • fabric,在Q有个神器叫 atnodes —— 批量 ssh 工具(作者之一是万珣新万大师,perl 写的),Python 世界里有好几个和这个对应的东西,我用过最好用并认为最有前途的是 fabric,可以批量运行 ssh、上传下载、脚本化运行方面结合 Python 代码,清晰明了。从其 roadmap 可以看出有打造 Python 世界中 rake 和 chef 的趋势。fabric 在哪儿执行最方便?当然是跳板机啦~
  • supervisor,类似 systemd、daemontools等,Python 世界中的进程管理工具,用于启动 nginx,Python 脚本,flask web应用、gunicorn 等。纯 Python 实现,有需要进程管理的就交给它吧

算法 & 机器学习

  • numpy,用来做数值计算,Python 的简洁语法在这里体现非常明显
  • scikit-learn,主流机器学习算法在这里都有,并且统一接口,易于上手,对着教材写个 hello world 什么的至少是很快的,别的不说,官方文档图文并茂,帅呆了
  • Matplotlib,数据可视化,代码和图图都漂亮的就靠这个了

web

  • flask,Servlet 写烦了有木有,Spring 太重了有木有,Jsp 一坨一坨太磕碜了有木有,Java 搭个环境一闭眼一睁眼一星期过去了有木有。试试 flask,分分钟出 demo

小工具

  • requests,数据抓取用这个很方便,它的 slogan 是 HTTP For Human Beings,言外之一是啥,其他库不是给 Human Beings 用的~
  • gevent,代码执行太慢?一般是阻塞了,gevent 基于 libev,提供类似协程的执行体,加上非阻塞 IO 模型,最潮的“并发”执行方式
  • pyparse,自己写个 JSON diff 工具,自己写个 Hive SQL Code Formatter 什么的,顺便复习(重学、入门)一下编译原理
  • pyXXX,和码农有关的 tag 前面加个 py 后搜一下,一般都会有个玩意儿,比如 pySVN 什么的,能干什么?发挥自己的想象力好了~

资料推荐

以下是在 Python 方面我收集的一些电子书,我也没有完全读完,但这些还都不错,有兴趣的话欢迎交流

  • Beginning.Python.pdf
  • byte.of.python.30.pdf
  • Core.Python.Applications.Programming.3rd.pdf
  • Data.Structures.and.Algorithms.in.Python.pdf
  • Data.Structures.and.Algorithms.Using.Python.pdf
  • diveintopython.pdf
  • diveintopython3.pdf
  • Expert.Python.Programming.pdf
  • Fundamentals.of.Python--From.First.Programs.through.Data.Structures.pdf
  • Generators.pdf
  • Getting.Started.with.Pyparsing.pdf
  • Head.First.Python.pdf
  • How.to.Think.Like.a.Computer.Scientist--Learning.With.Python.pdf
  • Introduction.to.Computer.Science.Using.Python.pdf
  • Learning.Python.4th.pdf
  • Learning.Python.5th.pdf
  • Matplotlib.for.Python.Developers.pdf
  • NLP.with.Py.pdf
  • NumPy.Beginners.Guide.2nd.pdf
  • NumPy.Cookbook.pdf
  • pandas.pdf
  • Programming.Computer.Vision.with.Python.pdf
  • Py.Cookbook.chm
  • PyPy.in.Production.pdf
  • Python+学习笔记+第二版.pdf
  • python-guide.pdf
  • Python.Algorithms.pdf
  • Python.Cookbook.3rd.pdf
  • Python.for.Data.Analysis.pdf
  • Python.for.Everyone.pdf
  • Python.for.Unix.and.Linux.System.Administration.pdf
  • Python.Testing.Cookbook.pdf
  • Scipy.and.Numpy.pdf
  • The.Python.Standard.Library.by.Example.pdf
  • Think.Python.pdf
  • Thinking.In.Python.pdf
  • Violent.Python.pdf
  • 用Python做科学计算.pdf

心得

  • 以上提到这些东西是一年多以来我在酒店 Python 方面鼓捣过的东西,多数都是浅尝辄止,但是很有乐趣
  • 有问题先 search the f^cking web & read the f^cking manual
  • 官方文档、华蟒邮件列表、stackoverflow 多看看。其他 nodejs、ruby 社区也没事儿逛逛,这些生态系统中的好东西一般都可以和 Python 一比一翻译
  • 有些问题一定是要自己经历亲身经历一下才知道以后如何解决的,比如丢失依赖、乱码、第三方库的烂坑等。遇到这些问题时,如果时间上有余地,可以深挖一下
  • 标准库不给力(不强大,不好用)的情况下一般会有个第三方包,比如 requests,还有日期处理之类的(Java 和 Python 的日期、时间处理的标准库都不好用)
    • 其他生态系统中好东西在 Python 世界一般都会有一份包装,比如 PyLucene(Lucene)、Gevent(Libev),PyLibpcap(Libpcap),PyWebkit(webkit)等

 

原文地址:https://www.cnblogs.com/ranger-cc/p/3441234.html