史上最全的Python开发秘籍,学完这些年薪百万不是问题
Python 之所以这么流行得益于它适用于很多不同领域,目前 Python 使用最广泛的领域包括有 Python Web(后端)开发、数据分析挖掘、网络爬虫、机器学习人工智能、运维开发等等。不管你选择哪个方向,把Python基础学牢有利于你在该领域更好的施展拳脚。
何为神奇方法呢?它们是面向Python中的一切,是一些特殊的方法允许在自己的定义类中定义增加“神奇”的功能。它们总是使用双下划线(比如__init__或__lt__),但它们的文档没有很好地把它们表现出来。所有这些神奇方法都出现在Python的官方文档中,但内容相对分散,组织结构也显得松散。还有你会难以发现一个实例(虽然他们被设计很棒,在语言参考中被详细描述,可之后就会伴随着枯燥的语法描述等)。
为了弥补Python官方文档的这些缺陷,作者整理了这篇有关magic method的文章,旨在用作教程、复习或参考文档。
我用 Python 编程有几年了, 并且我仍然经常惊讶于 Python 代码可以如何的简洁,如何的 DRY 。 我学到了很多小贴士和技巧,大多数来自于阅读开源项目的源代码,像 Django, Flask, Requests 等。
这里我挑出了几个有时被大家忽略的几条,但是它们在日常工作中会有很大帮助。
字典和集合推导式
大多数 Python 开发者知道使用列表推导式。你不熟悉这一点? 一个列表推导式是一个创造列表的简短方式:
>>> some_list = [1, 2, 3, 4, 5]
从 Python 3.1 开始(也反向地移植到了 Python 2.7),我们可以用同样的方式创建集合和字典:
>>> # Set Comprehensions
第一个例子中,我们用 some_list 建立了一个元素不重复的集合,但只有偶数。第二个字典的例子中展示了一个字典的创建,这个字典的键是1到10(包括10),值是布尔值,指明该键是不是一个偶数。
另一个值得注意的地方是集合的文法,我们可以这么简单的创建一个集合:
>>> my_set = {1, 2, 1, 2, 3, 4}
而没有使用到内建的 set 方法
使用计数器对象计数
很明显,但很容易遗忘。计数是一个寻常不过的编程任务,而且大多数情形下这不是个难事。不过计数可以更简单。
Python 的 collections 库包含一个 dict 的子类,专门解决计数任务:
>>> from collections import Counter
漂亮的打印 JSON
JSON 是一个很棒的序列格式,如今广泛应用在 API 和 web 服务中,但是很难用裸眼来看大数据量的 JSON ,它们很长,还在一行里。
可以用参数 indent 来更好地打印 JSON 数据,这在跟 REPL 或是日志打交道的时候很有用:
>>> import json
另外,去看看内建模块 pprint , 它可以帮助你漂亮地输出其它的东西。
快速建立一个 web 服务
有时我们需要一个建立 RPC 服务简单而快速的方法。我们需要的只是让程序B去调用程序A(可能在另一个机器上)的方法。
我们不用了解关于这个的任何技术,但是我们只是需要这么个简单的东西,我们可以使用一个叫做 XML-RPC 的协议(对应的 Python 库实现 SimpleXMLRPCServer )来处理这种事。
这里是一个简单粗糙的文件阅读服务器:
from SimpleXMLRPCServer import SimpleXMLRPCServer
响应它的客户端:
import xmlrpclib
现在我们就有了一个远程的文件阅读器,除了一点代码,没有外部依赖。(当然,不安全,所以只在”家”用这个吧)
Python 的开源社区
刚我一直在说 Python 的标准库了,这些库只要你安装 Python 就会包含在你的 Python 中。对于大多数的其他任务,这里有大量的社区维护的第三方库来满足我们的需求。
这是一个我挑选 Python 库的办法:
包含一个明确的协议,以便我们使用
积极活跃的开发和维护
可以用 pip 来安装,可以轻易地重复部署
拥有一个合适覆盖率的测试集
如果你发现了一个适合你需求的 Python 库,不要害羞,大多数开源项目欢迎我们贡献代码和协助,即使你不是一个Python 老将。帮助之手随时受欢迎!
追加的技巧
快速在一个目录建立 HTTP 服务器
python -m SimpleHTTPServer 推荐:共享文件常用
在 Python 3 中:
python -m http.server 推荐:共享文件常用
命令行上漂亮地打印 JSON:
echo '{"json":"obj"}' | python -mjson.tool
而且,如果你安装了 Pygments 模块,可以高亮地打印 JSON:
echo '{"json":"obj"}' | python -mjson.tool | pygmentize -l json