Python 除了 PEP 还有其他类似最佳实践类的图书/网站/资源么?

2021-07-01 16:06:48 +08:00
 shayuvpn0001

简单的需求用 Python 写起来是很爽,找找轮子,搜搜代码很快就能跑起来。然而一旦稍微做大了,对脚本稳定性有较高要求,对资源控制有较高要求,特别是和水平不同的人一起合作的时候,强迫症很容易被折磨的各种抓狂。想弄个规范或者最佳实践来约束一下,先举下面几个例子:

1,如果想清空一个 List,较好的方法是 del myList[:],而不是 myList = [],后者只是给 myList 开辟了一个新的 List,原来的 List 还在内存中。
2,访问一个文件的时候,一般使用下面的 f = open("welcome.txt"),然而更好的做法是 with open("welcome.txt") as f: ,这样文件会自动关闭。

上面只是两个简单的例子,事实上涉及到文本编码,Python 2 和 3 版本,异常处理,多线程 /异步还有更多的需要注意的地方。灵活的好处是开发速度快,但同时也加大了后续的成本,真的是一把双刃剑。

想问一下哪里还有这种类似的规范或者总结,目前我个人发现这类比较集中的总结性文档主要有:
1,PEP
2,Effective Python
3,The Hitchhiker's Guide to Python
4,模板方面:cookiecutter,PyScaffold 和 python-boilerplate

各位还有其他推荐的么?

1631 次点击
所在节点    程序员
21 条回复
ampedee
2021-07-01 18:23:35 +08:00
有本书叫 编写高质量代码:改善 Python 程序的 91 个建议,还有一本 python cookbook 可以看看。
不过第一个例子的写法我确实从来没见过,等着它自动垃圾回收就好了
no1xsyzy
2021-07-01 18:24:48 +08:00
myList = [] 的话会自动回收的,目前来说 CPython 实现上仍然会在引用计数归零时强制触发回收。
PEP 算不上「规范或者总结」
pcbl
2021-07-01 19:47:10 +08:00
同楼上,第一个直接写 l=[]没问题
xiaket
2021-07-01 20:41:21 +08:00
用 Python 的人更应该关注脚本可读性, 大多数情况性能什么的不是那么重要. 或者说追求性能用 Python 这个语言就目前来看就是走歪了.
mimzy
2021-07-01 21:11:03 +08:00
不推荐《编写高质量代码:改善 Python 程序的 91 个建议》,作者的代码一点都不 Pythonic 。

推荐《 Effective Python 》《 Fluent Python 》。翻过《 Robust Python 》,主要围绕 Type Hints 讲解,感兴趣也可以看看,推荐。最近在翻《 Modern Python Cookbook 》,感觉也还可以。不过现在的程序员也不在乎 Pythonic 了,能跑就行,不行就换语言,所以感觉俺也不用太执着了 = =
Kilerd
2021-07-01 21:28:32 +08:00
Fluent Python

Python CookBook
shayuvpn0001
2021-07-01 22:49:46 +08:00
@xiaket
@mimzy

可读性,是不是 Pythonic 其实都没放在第一位,性能也没有放在较高的优先级上,目前的主要想法是把脚本长期运行的稳定性放在第一位,然后是团队风格尽量统一。

比如那个打开文件的例子。如果团队里来了新人,写出了 f = open("welcome.txt"),你说他写错了没?没有,但是这样的模块和其他老员工的组合到一起,就特别让强迫症受不了。你也不好批评新人,你批评他,他嘴上不说心里嘀咕着“大不了我 try except,finally 里面检查一下 f 是不是 none,不是我来个 f.close 就好了。每个人有每个人的风格嘛。” 如果我出了一个项目规范文档,那么我可以一开始就让新人学习一下,以后再出现这种,就能名正言顺给他否掉了。

多人协作风格统一还是很重要的,最理想状态是代码看起来都像是一个人写的,后续维护成本会大幅减少。性能方面,能注意的尽量注意,代码长期运行的稳定性和可维护性还是放在第一位的。
LeeReamond
2021-07-02 07:45:20 +08:00
@shayuvpn0001 兄弟别写后端了...这么简单的规范问题你都能写出来这么多字属实是人才,还能写出来团队里不服管的新人的例子,不如去做前端,多写技术博客,你会很有发展。
deplives
2021-07-02 08:47:14 +08:00
别扯没用的 就你写的第一个我就知道你的水平
abersheeran
2021-07-02 09:27:44 +08:00
楼上+1 。看到第一个例子我就觉得你压根不懂引用计数回收……建议先多看看再考虑给人定标准,不然你一定会被人骂。
shayuvpn0001
2021-07-02 09:33:02 +08:00
@LeeReamond 我什么时候说了用 Python 写后端了?我本身也不是主要写 Python 的啊?

Python 目前我们主要用来做 Excel 数据处理,做小工具,偶然用 Flask 做一些内部 Web 应用。后面考虑到跨平台,会把部分.Net 写的 Win 平台上的工具用 Python 重写。这部分工作以后会给实习生来做,所以才会想弄一套规范省得 Review 时候在这些细枝末节上面烦心啊。

正因为以后 Python 比重会增加,才会有做一个内部规范的想法。如果有阿里的 Java 规范那种我就直接拿过来用了。

@deplives 我知道文件的引用计数,Python 不是主力语言,水平有限抛砖引玉总可以吧。
myCupOfTea
2021-07-02 09:33:28 +08:00
myList = [] 明明就会自动回收 你说啥呢
shayuvpn0001
2021-07-02 09:33:40 +08:00
@abersheeran 显式删除有什么问题?
youngce
2021-07-02 09:42:09 +08:00
Python 风格规范— Google 开源项目风格指南: https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/contents/

你说的第二点在这个指南里面也有提到,第一点确实不敢苟同
abersheeran
2021-07-02 09:42:53 +08:00
@shayuvpn0001 你的问题在于 myList = [] 本来没有问题,如果你说性能,它甚至比你的 del 还少一半的字节码。

另外,我清空列表一般用 my_list.clear()。
deplives
2021-07-02 09:44:04 +08:00
@shayuvpn0001 https://docs.python.org/3/reference/simple_stmts.html#the-del-statement
自己看看 del 的作用,别拿 del 和 c++里面的 delete 比较,半吊子水平就别自己搞一套规范了。真就骗骗实习生还行
shayuvpn0001
2021-07-02 09:46:08 +08:00
@youngce 谢谢。
qW7bo2FbzbC0
2021-07-02 09:58:01 +08:00
Pythonic 我认为更多是保证可读性吧
zhuangzhuang1988
2021-07-02 10:03:48 +08:00
能用就行.
www5070504
2021-07-02 14:18:16 +08:00
你想要的可能是 flake8 或者其他的静态代码分析

flake8 好用, 连空行多个空格都能扫出来

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/786948

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX