简单的需求用 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
各位还有其他推荐的么?
1
ampedee 2021-07-01 18:23:35 +08:00 via Android
有本书叫 编写高质量代码:改善 Python 程序的 91 个建议,还有一本 python cookbook 可以看看。
不过第一个例子的写法我确实从来没见过,等着它自动垃圾回收就好了 |
2
no1xsyzy 2021-07-01 18:24:48 +08:00
myList = [] 的话会自动回收的,目前来说 CPython 实现上仍然会在引用计数归零时强制触发回收。
PEP 算不上「规范或者总结」 |
3
pcbl 2021-07-01 19:47:10 +08:00 via Android
同楼上,第一个直接写 l=[]没问题
|
4
xiaket 2021-07-01 20:41:21 +08:00
用 Python 的人更应该关注脚本可读性, 大多数情况性能什么的不是那么重要. 或者说追求性能用 Python 这个语言就目前来看就是走歪了.
|
5
mimzy 2021-07-01 21:11:03 +08:00 1
不推荐《编写高质量代码:改善 Python 程序的 91 个建议》,作者的代码一点都不 Pythonic 。
推荐《 Effective Python 》《 Fluent Python 》。翻过《 Robust Python 》,主要围绕 Type Hints 讲解,感兴趣也可以看看,推荐。最近在翻《 Modern Python Cookbook 》,感觉也还可以。不过现在的程序员也不在乎 Pythonic 了,能跑就行,不行就换语言,所以感觉俺也不用太执着了 = = |
6
Kilerd 2021-07-01 21:28:32 +08:00 1
Fluent Python
Python CookBook |
7
shayuvpn0001 OP @xiaket
@mimzy 可读性,是不是 Pythonic 其实都没放在第一位,性能也没有放在较高的优先级上,目前的主要想法是把脚本长期运行的稳定性放在第一位,然后是团队风格尽量统一。 比如那个打开文件的例子。如果团队里来了新人,写出了 f = open("welcome.txt"),你说他写错了没?没有,但是这样的模块和其他老员工的组合到一起,就特别让强迫症受不了。你也不好批评新人,你批评他,他嘴上不说心里嘀咕着“大不了我 try except,finally 里面检查一下 f 是不是 none,不是我来个 f.close 就好了。每个人有每个人的风格嘛。” 如果我出了一个项目规范文档,那么我可以一开始就让新人学习一下,以后再出现这种,就能名正言顺给他否掉了。 多人协作风格统一还是很重要的,最理想状态是代码看起来都像是一个人写的,后续维护成本会大幅减少。性能方面,能注意的尽量注意,代码长期运行的稳定性和可维护性还是放在第一位的。 |
8
LeeReamond 2021-07-02 07:45:20 +08:00
@shayuvpn0001 兄弟别写后端了...这么简单的规范问题你都能写出来这么多字属实是人才,还能写出来团队里不服管的新人的例子,不如去做前端,多写技术博客,你会很有发展。
|
9
deplives 2021-07-02 08:47:14 +08:00 via iPhone
别扯没用的 就你写的第一个我就知道你的水平
|
10
abersheeran 2021-07-02 09:27:44 +08:00
楼上+1 。看到第一个例子我就觉得你压根不懂引用计数回收……建议先多看看再考虑给人定标准,不然你一定会被人骂。
|
11
shayuvpn0001 OP @LeeReamond 我什么时候说了用 Python 写后端了?我本身也不是主要写 Python 的啊?
Python 目前我们主要用来做 Excel 数据处理,做小工具,偶然用 Flask 做一些内部 Web 应用。后面考虑到跨平台,会把部分.Net 写的 Win 平台上的工具用 Python 重写。这部分工作以后会给实习生来做,所以才会想弄一套规范省得 Review 时候在这些细枝末节上面烦心啊。 正因为以后 Python 比重会增加,才会有做一个内部规范的想法。如果有阿里的 Java 规范那种我就直接拿过来用了。 @deplives 我知道文件的引用计数,Python 不是主力语言,水平有限抛砖引玉总可以吧。 |
12
myCupOfTea 2021-07-02 09:33:28 +08:00
myList = [] 明明就会自动回收 你说啥呢
|
13
shayuvpn0001 OP @abersheeran 显式删除有什么问题?
|
14
youngce 2021-07-02 09:42:09 +08:00 1
Python 风格规范— Google 开源项目风格指南: https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/contents/
你说的第二点在这个指南里面也有提到,第一点确实不敢苟同 |
15
abersheeran 2021-07-02 09:42:53 +08:00 1
|
16
deplives 2021-07-02 09:44:04 +08:00 1
@shayuvpn0001 https://docs.python.org/3/reference/simple_stmts.html#the-del-statement
自己看看 del 的作用,别拿 del 和 c++里面的 delete 比较,半吊子水平就别自己搞一套规范了。真就骗骗实习生还行 |
17
shayuvpn0001 OP @youngce 谢谢。
|
18
qW7bo2FbzbC0 2021-07-02 09:58:01 +08:00
Pythonic 我认为更多是保证可读性吧
|
19
zhuangzhuang1988 2021-07-02 10:03:48 +08:00
能用就行.
|
20
www5070504 2021-07-02 14:18:16 +08:00 1
你想要的可能是 flake8 或者其他的静态代码分析
flake8 好用, 连空行多个空格都能扫出来 |
21
LeeReamond 2021-07-02 16:05:58 +08:00 via Android
@shayuvpn0001 水平差倒是无所谓,我建议你学写程序之前还是先写好语文吧。建议你仔细看看我的回帖,哪里有任何一丁点的字眼提到你是 python 技术栈的?也不知道你回了那么多字在回什么,啥都能长篇大论,人才
|