提高你的Python编码效率的“武林秘籍”

我用 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
注意 {} 是一个空的字典,而不是空的集合

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,436评论 6 428
  • 我们都希望自己成为受欢迎的人,自己的说的话别人都能够感兴趣,但是每个人都是天生只对自己感兴趣的,当你说的内容,让别...
    刻意练习社区阅读 644评论 1 2
  • 爱情开始的城 20牧慕 我说我这面的店面处理需要几个月的时间,所以暂时必须留在这里。被撞伤这事我不能也不想让家里知...
    草原上的咩咩羊阅读 225评论 0 1
  • 常用的HTML标签与含义 1:div,块级元素,类似于盒子,可以在里面存放内容2:p,块级元素,存放一段话3:h1...
    Arno_z阅读 277评论 0 1