你们认为怎样的代码才算是 pythonic

2017-01-12 16:16:59 +08:00
 gino86

有人说,处理文件的时候用 try except ,那很不 pythonic,用 context manager 就很好 例如:

try:
    with open('D:\nothing_here.exe') as fd:
    # do something here
except Exception as error:
    #handle error

也有人说 for 循环里写 if 也很不 pythonic ,应该用列表推导。我就想听听大家的意见

2963 次点击
所在节点    程序员
15 条回复
kutata
2017-01-12 16:30:40 +08:00
最近有个项目需要用到 python ,原来这写到一列的代码叫做列表推导,酷炫!😂
gimp
2017-01-12 16:42:25 +08:00
在 python 控制台中输入 import this ,就会输出 python 之禅

个人理解就是使用 python 的特性使得代码更加的高效,简洁,可读
introom
2017-01-12 16:47:23 +08:00
你能跑,别人看得懂就行了
gouchaoer
2017-01-12 16:48:35 +08:00
不兼容,低性能, list comprehension+list slicing+参数缺乏类型甚至鼓励忽略类型的写法+第三方库缺乏 typehint 等导致读不懂,编码灾难,第三方库都统一安装到全局 py 二进制,游标卡尺,没有办法格式化代码
jarry777
2017-01-12 16:48:49 +08:00
@gimp
然而 this 的源码一点都不 pythonic 。。。
gouchaoer
2017-01-12 16:49:42 +08:00
啥是 pythonic , guido 去 google 还得学怎么写规范的大家能读懂的 python 编码风格
gimp
2017-01-12 17:06:44 +08:00
@jarry777 这就尴尬了。
sudoz
2017-01-12 17:14:39 +08:00
@kutata effective python 里说了,不要过度使用列表推导,改用 for 循环嵌套就用 for 嵌套
octopus_new
2017-01-12 17:19:26 +08:00
如果你认同在 production 代码中去掉不必要 try except , context manager 就是更好的选择
"也有人说 for 循环里写 if 也很不 pythonic ,应该用列表推导", 个人认为这个可能要分情况吧, list comprehension 目的是生成 list ,如果 for 循环的目的不是生成 list ,那么还需要用到 list comprehension 么?难道 for 都需要写成 list comprehension 才算 pythonic... 更不用说其中是否包含 if. 而且 list comprehension 的性能也是在生成 list 的时候才比一般的 for loop 更快,如果不生成 list 那么 list comprehension 的性能是比 for loop 更差一些。
当然最重要的一点是,如果工作在一个团队中,代码是需要容易理解的,追求风格之类的考虑很难说是重要的.
其实 pythonic 这种提法,我个人认为是为了让大家"正确"使用 python ,使用 python 中最优的解决方法,如果你越接受这种"正确"的解决方法,那么你就越 pythonic ,是这么个意思吧?
spice630
2017-01-12 17:25:26 +08:00
你用 golang 就不会出现这么无用的问题了
kutata
2017-01-12 17:28:35 +08:00
@sudoz 啊,刚入门,还在熟悉语法中~
gladuo
2017-01-12 17:32:50 +08:00
phrack
2017-01-12 18:17:15 +08:00
总结起来还真不好说,可能结合几个例子会合适点。我自己感觉的话就是,一个算法的几个代码实现中比较简洁又不会过于依赖语法糖导致难懂的那个。
hahastudio
2017-01-12 18:24:56 +08:00
能用原生语法、标准库的,就用那些
loading
2017-01-12 18:27:14 +08:00
@spice630 对,只要查一下 if err != nil 的数量就行,哈哈。

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

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

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

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

© 2021 V2EX