【转】Python资源 转自 dylanninin.com
http://dylanninin.com/blog/2013/11/23/python_resource.html
Python是在工作期间零零碎碎学习起来的。当时正值部门申购图书,鉴于 Python 的动态、快速等特性,就申请买了一本《Python 核心编程》, 内容可谓全面,但翻译实在太差,有些概念看了几遍也没弄清楚,所以只匆匆翻阅完了解一个大概。 后来在豆瓣上看了下评分,不到 8 分的样子,顺便做了下简评“只能说看这本书省去了初学者看电脑的眼疲劳,可以快速浏览一窥全貌。不过相比公开课,或者网上 的教材,太不适合入门;尽管我还是硬着头皮差不多看完,也差不多入门”。
对 Python 有所了解之后,断断续续写了一些简单的程序,按先后顺序汇总如下:
-
BBS 账户批量导入工具:基于 Discuz!,数据库为 MySQL,直接读取 Excel 中的数据批量导入即可;当时正好在找代码片段分享的网站,就贴在snipplr上,这应该是我的第一个可以用的 Python 程序。
-
复杂密码生成工具:关于这个还有一段趣事,见本站Complex Password Utility,源代码PasswordGen on Github。
-
邮件测试工具:碰到的 Java 程序员们连一个简单的SMTP测试用例都懒得写,所以整了一个 Python 版,参考email: Examples;用Telnet当然也可以,见本站Telnet Introduction。
-
LDAP 账户查找工具:那时公司出了所谓的内网导航,提供查找员工的电话、邮件等信息,但后来残了,邮件地址不再显示(在一个靠邮件来沟通的公司,可见这种残会有多残),所以写了一个脚本自己用,见源代码LDAPSearch on Github。
-
Java Service 接口测试用例生成工具:在For Rails中提到过,思路见模板jUnit TestCase Gist。
-
Markdown Blog 程序:使用Web.py开发的 Blog 程序,自动渲染 Markdown 格式成 HTML,见Blog on Github,在线demo。
-
单词排行程序:同学在邮件中提到Writing an Hadoop MapReduce Program in Python,手上正好有 Oracle Database 11g 的全部文档,所以动手统计了一下词频,不知道每年的高考、考研的英语高频词汇是不是这样统计出来的。
以上大概是自学 Python 以来写过的一些程序,大部分代码还在,从中可见 Python 代码写得很不成熟;分析起来无非就是 Python 基础不过关、对标准库第三方库不熟练、受时间精力约束程序缺少锤炼、阅读源代码太少等之类的原因;当然,也很业余。
为什么是 Python
前段时间写For Rails时,稍微概括了下自己的工作,这里再提一下:我是一枚 Java 攻城狮,工作两年多,主要做Java Web开发,期间转去做了一年多的Oracle DBA,维护Oracle EBS,也当过Linux Administrator。似乎涉猎的东西太多太浅,有点样样稀松的嫌疑。
那么,为什么要学 Python 呢?我觉得可以先看看 Peter 的Teach Yourself Programming in Ten Years,中文翻译见十年学会编程。
关于语言的选择,这里直接抄录十年学会编程:
不少人问我,他们首先该学哪种编程语言。没有绝对的答案,不过请考虑以下几点:
-
用你的朋友的。当被问起“我该用哪种操作系统,Windows,Unix, 还是 Mac?”,我总是回答:“你朋友用什么,你就用什么。” 你从朋友那能学到知识,这种优势可以抵销不同操作系统或语言之间本质的差异。也考虑你将来的朋友:程序员社区 — 你将成为它的一部分如果你继续往前走的话。你选择的语言是否有一个成长中的社区,还是人数不多、即将消亡?有没有书籍、网站、在线论坛回答你的问题?你喜 欢论坛里的那些人吗?
-
Keep it simple, stupid. 象 C++ 和 Java 这样的语言是为经验丰富的程序员组成的团队进行专业开发而设计的,他们专注于代码运行时的效率。因此,这些语言有些部分非常复杂。而你 关注的是如何编程,不需要那些复杂性。你需要的是这样的语言: 对单个的编程新手来说,它易学易记。
-
练习。你偏爱哪种学弹钢琴的方式:通常的交互式的方式,你一按下琴键就能听到音符;还是“批量”模式,你只有弹完整首曲子才能听到音符? 显然,用交互模式学习弹钢琴更容易些,编程也一样。坚持用交互模式学习并使用一种语言。
有了上面的准则,我推荐的第一个编程语言是Python或Scheme。因人而异,还有其它好的选择。如果你的年纪是 10 岁以下,你可能更喜欢 Alice。关键是你要选择并开始实践。
正如文中提到的一样,我学习 Python 很大一部分原因就是朋友的介绍;经过一些练习之后,你会发现自己越来越喜欢 Python 的简洁。印象最深的一次,要属部门一次关于Web Service的技术交流会,主持人用 Java 来演示XML RPC、JSON RPC、SOAP,不说混杂着各种Annotation,连这些协议都未所有触及,就疯狂的演示各种语言的客户端程序了。鉴于此,我花了几天时间看了下 wiki,然后用 Python 做了几个原型,还附加地看了REST,这时你会发现用 Python 来解释会更加简明,这大概就是奥卡姆剃刀所讲的简单有效原理吧。
一点 Python 编程资料
因为 Python 学习得很业余,所以想加强理解,提高编程技能;在工作之余顺手收藏了一些 Python 相关的资料,有一些看了一部分就搁置了,但时常还是会想起来是不是该抽点时间继续看看。基于以上原因,就动手整理一份 Python 编程的资料作为索引,以后会陆续更新。
入门和基础
Python 有 Python 2.x 和 Python 3.x 之分,争论很多,见Python2orPython3。初学者不用考虑这个问题,可以从 Python 2.x 入门,之后再讨论会多一些理性。
-
洪强宁:Python 于 Web 2.0 网站的应用:豆瓣网洪强宁在 QCon 北京 2010 中的技术分享,若不能访问,请自备梯子;另外,豆瓣的阿北很值得关注。
-
A Byte of Python:即简明 Python 教程,边看边练习就对 Python 有基本的了解,可以轻松存活。
-
Google’s Python Lessons:Google 出品的 Python 教程,值得信赖。
-
Python Documentation:Python 在线文档,若嫌枯燥,可以直接看Python Standard Lib。
-
42 区:python 入门指引:江湖人称张教主的 Python 资料索引。
-
CS61A: SICP with Python:作为计算机相关人士,SICP都不了解,实在很惭愧,所以来还债了。这应该是起源于MIT 的 SICP教程,一个用 Python,一个用 Scheme。
-
看到一个有趣的 python 的招聘测试:同学发的一个贴,总结了一下应聘中遇到的问题,并给出了相应的资料来学习。如果想检测下自己的 Python 水平,请自觉移步北京视讯天下的开发测试。
-
MOOC 们:在线公开课很多,见课程图谱;仅在Codecademy上学了一点;现在希望能够每天跟进一些感兴趣的课程,多多学习。
-
书:去年 6 月份一同事离职,我买了两本黑客与画家,一本送给他 ( 博客一起去看海),另一本给部门老大;他回送了一本Python 源代码剖析,看书名就知道是讲底层原理的,有机会啃啃。
-
源代码:直接到Github上去找吧。
Python 与数据库
在项目开发中,数据库应用必不可少。这里汇总下目前接触过的数据库和使用教程。
SQL,计算机出身的人应该都学过,若有疑问可以参考Wikipedia SQL,并使用 SQLite 做下练习。
-
PEP249: DB API:数据库访问接口规范,当时还做了一份笔记。
-
SQLite:教程见SQLite Python Tutorial;若要深入了解,推荐The Definitive Guide to SQLite;看此书时,做了一些好句子、段落的摘要,见Sentences in SQLite 3。
-
Oracle Database:有可能这是最庞大的数据库,所以需要专职的 DBA。官方教程The Mastering Oracle+Python Series,快速入门教程cx_Oracle Quick Start。
-
SQLAlchemy:Python 的 ORM 标准和框架,解决面向对象编程和关系数据库模式不匹配的问题。
数据库理论除了 SQL,还有另一派 NoSQL。
关于 NoSQL,先上一段笑话:“Big data is like teenage sex: everyone talks about it, nobody really knows how to do it, everyone thinks everyone else is doing it, so everyone claims they are doing it.” Big Data和NoSQL紧密相连,Big Data 为甚?目前我没有多少理解和认识,所以先来看看 NoSQL,在NoSQL Database上的定义和介绍:
NoSQL DEFINITION: Next Generation Databases mostly addressing some of the points: being non-relational, distributed, open-source and horizontally scalable.
The original intention has been modern web-scale databases. The movement began early 2009 and is growing rapidly. Often more characteristics apply such as: schema-free, easy replication support, simple API, eventually consistent / BASE (not ACID), a huge amount of data and more. So the misleading term “nosql” (the community now translates it mostly with “not only sql”) should be seen as an alias to something like the definition above.
关于常见 NoSQL 产品的比较见Main NoSQL Database Comparison;若果需要一些 NoSQL 的理论知识和基本概念,见The NoSQL Ecosystem、Big Data 与 NoSQL。目前仅用过MongoDB和Redis。
-
MongoDB:如果熟悉 SQL,MongDB 的学习成本会很低;相关资料见Python Language Center in MongoDB;用过的两个驱动:1)PyMongo,提供了类似 Mongo Shell 的接口;2)MongoEngine: A Python Object-Document-Mapper for working with MongoDB,即 MongoDB 的’ORM’框架,此时变成了’ODM’,MongoEngine on Github。
-
Redis:Redis 需要一些学习成本,入门推荐The Little Redis Book;用过的 Python 客户端驱动Redis-py;更多客户端见Redis Clients。
-
NoSQL 建模:SQL 发展了几十年,有很成熟的建模技术,那么 NoSQL 呢,见陈皓:NoSQL 数据建模技术,原文NoSQL Data Modeling Techniques。
-
更多资料:NoSQL 英文站点见NoSQL Database;NoSQL 中文论坛见NoSQL Fan:关注 NoSQl 相关的新闻和技术。NoSQL Fan 中,MongoDB 和 Redis 资料很多,已经形成了资料专题,包括介绍、内部实现、应用与优化、新闻等,总能发现你想要的东西:1)NoSQL Fan:Redis 资料汇总专题;2)NoSQL Fan: MongoDB 资料汇总专题。
Python 与 Web 开发
Python 的 Web 框架众多,见Web Frameworks for Python,总有一款适合你或你的项目,实在不行,请动手打造自己的框架;为什么会有这么多框架呢,见Why so many Python wen frameworks?。
-
Web.py:已故Aaron Swartz的 框架。一句话介绍”web.py is a web framework for Python that is as simple as it is powerful. web.py is in the public domain; you can use it for whatever purpose with absolutely no restrictions.”。接触的第一个 Web 框架,后来模仿 MovableType,写了一个简单的博客,见Blog on Github,在线 demo http://ec2-54-251-227-120.ap-southeast-1.compute.amazonaws.com;碰到的坑点是模板中嵌套 Python 代码一直有缩进问题。
-
Flask:一句话介绍”Flask is a lightweight web application framework written in Python and based on the Werkzeug WSGI toolkit and Jinja2 template engine. It is BSD licensed. Flask is called a microframework because it keeps the core simple but extensible”。因为工作变动,练习过一段时间的 Flask,以便熟悉开发的工具链;如果没有 Rails,我想这才是自己首选的 Web 开发框架: simple but extensible and for fun。实战教程The Flask Mega-Tutorial。
-
Tornado: 来自FriendFeed的异步框架,FriendFeed 被 Facebook 收购后开放了源代码,见Tornado on Github。一句话介绍”Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed”。Tornado 主要特点是non-blocking,如果你想开发real-time的 Web 应用,Tornado 是一个不错的选择。
-
Django:一句话介绍”Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.”,接触不多,作为全栈式框架,听说它的组件都是 Made in Django。更多资料见Django 资料。
IDE
- Vim + Python Mode。目前就用这个方案,很方便,直接引用同学的效果图。关于 Vim 资料和讨论,请移步Vim 资料大全;关于 Vim 更多插件和演示,请移步k-vim on Github;关于 Git,Github,请移步本站Free Blog with Github Pages。
社区
周刊
- Python Weekly:每周更新,包括 Python 相关的文章、教程、演讲、书籍、项目、工作等。
- Pycoder’s Weekly:与 Python Weekly 类似,两者可以互为补充,了解过去一周动态。
- 码农周刊: developerWorks出品的周刊,来自国人的分享。可以先看为什么要做《码农周刊》?;接着《码农周刊》用到的一些技术; 再接着周刊回顾。这里不仅仅是 Python。