提高你的Python编码效率
前言
我用Python编程有几年了, 并且我仍然经常惊讶于Python代码可以如何的简洁,如何的 DRY。我学到了很多小贴士和技巧,大多数来自于阅读开源项目的源代码,像 Django, Flask, Requests 等。
这里我挑出了几个有时被大家忽略的几条,但是它们在日常工作中会有很大帮助。
感谢各友的鼓励与支持🌹🌹🌹,往期文章都在最后梳理出来了(●'◡'●)
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇
字典和集合推导式
大多数Python开发者知道使用列表推导式。你不熟悉这一点?一个列表推导式是一个创造列表的简短方式:
1, 2, 3, 4, 5] > some_list = [
1 for x in some_list ] > another_list = [ x +
> another_list
[2, 3, 4, 5, 6]
从Python 3.1开始(也反向地移植到了Python 2.7),我们可以用同样的方式创建集合和字典:
# Set Comprehensions
1, 2, 3, 4, 5, 2, 5, 1, 4, 8] some_list = [
for x in some_list if x % 2 == 0 } even_set = { x
even_set
set([8, 2, 4])
# Dict Comprehensions
2 == 0 for x in range(1, 11) } d = { x: x %
d
{1: False, 2: True, 3: False, 4: True, 5: False, 6: True, 7: False, 8: True, 9: False, 10: True}
第一个例子中,我们用 some_list
建立了一个元素不重复的集合,但只有偶数。第二个字典的例子中展示了一个字典的创建,这个字典的键是1到10(包括10),值是布尔值,指明该键是不是一个偶数。
另一个值得注意的地方是集合的文法,我们可以这么简单的创建一个集合:
1, 2, 1, 2, 3, 4} > my_set = {
> my_set
set([1, 2, 3, 4])
而没有使用到内建的 set
方法
使用计数器对象计数
很明显,但很容易遗忘。计数是一个寻常不过的编程任务,而且大多数情形下这不是个难事。不过计数可以更简单。
Python的 collections 库包含一个 dict
的子类,专门解决计数任务:
> from collections import Counter
'hello world') > c = Counter(
> c
Counter({'l': 3, 'o': 2, ' ': 1, 'e': 1, 'd': 1, 'h': 1, 'r': 1, 'w': 1})
2) > c.most_common(
[('l', 3), ('o', 2)]
漂亮地打印JSON
JSON是一个很棒的序列格式,如今广泛应用在API和web服务中,但是很难用裸眼来看大数据量的JSON,它们很长,还在一行里。
可以用参数 indent
来更好地打印JSON数据,这在跟 REPL或是日志打交道的时候很有用👇
> import json
# No indention > print(json.dumps(data))
{"status": "OK", "count": 2, "results": [{"age": 27, "name": "Oz", "lactose_intolerant": true}, {"age": 29, "name": "Joe", "lactose_intolerant": false}]}
2)) # With indention > print(json.dumps(data, indent=
{
"status": "OK",
"count": 2,
"results": [
{
"age": 27,
"name": "Oz",
"lactose_intolerant": true
},
{
"age": 29,
"name": "Joe",
"lactose_intolerant": false
}
]
}
另外,去看看内建模块 pprint , 它可以帮助你漂亮地输出其它的东西。
快速建立一个web服务
有时我们需要一个建立RPC服务简单而快速的方法。我们需要的只是让程序B去调用程序A(可能在另一个机器上)的方法。
我们不用了解关于这个的任何技术,但是我们只是需要这么个简单的东西,我们可以使用一个叫做 XML-RPC 的协议(对应的Python库实现 SimpleXMLRPCServer )来处理这种事。
这里是一个简单粗糙的文件阅读服务器👇
from SimpleXMLRPCServer import SimpleXMLRPCServer
def file_reader(file_name):
with open(file_name, 'r') as f:
return f.read()
server = SimpleXMLRPCServer(('localhost', 8000))
server.register_introspection_functions()
server.register_function(file_reader)
server.serve_forever()
响应它的客户端👇
import xmlrpclib
proxy = xmlrpclib.ServerProxy('http://localhost:8000/')
proxy.file_reader('/tmp/secret.txt')
现在我们就有了一个远程的文件阅读器,除了一点代码,没有外部依赖。(当然,不安全,所以只在"家"用这个吧)
Python的开源社区
刚我一直在说Python的标准库了,这些库只要你安装Python就会包含在你的Python中。对于大多数的其他任务,这里有大量的社区维护的第三方库来满足我们的需求。
这是一个我挑选Python库的办法:
包含一个明确的协议,以便我们使用
积极活跃的开发和维护
可以用
pip
来安装,可以轻易地重复部署拥有一个合适覆盖率的测试集
如果你发现了一个适合你需求的Python库,不要害羞,大多数开源项目欢迎我们贡献代码和协助,即使你不是一个Python老将。帮助之手随时受欢迎!
追加的技巧
快速在一个目录建立HTTP服务器
python -m SimpleHTTPServer
命令行上漂亮地打印JSON
echo '{"json":"obj"}' | python -mjson.tool
而且,如果你安装了 Pygments
模块,可以高亮地打印JSON
echo '{"json":"obj"}' | python -mjson.tool | pygmentize -l json
注意
{}
是一个空的字典,而不是空的集合
「❤️ 感谢大家」
如果你觉得这篇内容对你挺有有帮助的话:
点赞支持下吧,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-) 欢迎在留言区与我分享你的想法,也欢迎你在留言区记录你的思考过程。 觉得不错的话,也可以阅读近期梳理的文章(感谢鼓励与支持🌹🌹🌹): 编程中的惰性思想 小程序云开发资源的管理 教你用python进行数字化妆,可爱至极 加速Python列表和字典,让你代码更加高效 汇总超全的Matplotlib可视化最有价值的 50 个图表(附完整 Python 源代码)(三) 汇总超全的Matplotlib可视化最有价值的 50 个图表(附完整 Python 源代码)(二) 汇总超全的Matplotlib可视化最有价值的 50 个图表(附完整 Python 源代码)(一) 教你用Python制作实现自定义字符大小的简易小说阅读器 「查缺补漏」巩固你对算法复杂度的理解 汇总了32个为开发者提供的免费工具 教你通过python利用近邻法实现图片缩小后变成另一张图(类似幻影坦克) 30 行代码实现蚂蚁森林自动收能量
老铁,三连支持一下,好吗?↓↓↓
点分享
点点赞
点在