V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
gino86
V2EX  ›  程序员

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

  •  
  •   gino86 · 2017-01-12 16:16:59 +08:00 · 3160 次点击
    这是一个创建于 2901 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有人说,处理文件的时候用 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 ,应该用列表推导。我就想听听大家的意见

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

    个人理解就是使用 python 的特性使得代码更加的高效,简洁,可读
    introom
        3
    introom  
       2017-01-12 16:47:23 +08:00 via Android   ❤️ 1
    你能跑,别人看得懂就行了
    gouchaoer
        4
    gouchaoer  
       2017-01-12 16:48:35 +08:00   ❤️ 2
    不兼容,低性能, list comprehension+list slicing+参数缺乏类型甚至鼓励忽略类型的写法+第三方库缺乏 typehint 等导致读不懂,编码灾难,第三方库都统一安装到全局 py 二进制,游标卡尺,没有办法格式化代码
    jarry777
        5
    jarry777  
       2017-01-12 16:48:49 +08:00 via Android
    @gimp
    然而 this 的源码一点都不 pythonic 。。。
    gouchaoer
        6
    gouchaoer  
       2017-01-12 16:49:42 +08:00
    啥是 pythonic , guido 去 google 还得学怎么写规范的大家能读懂的 python 编码风格
    gimp
        7
    gimp  
       2017-01-12 17:06:44 +08:00
    @jarry777 这就尴尬了。
    sudoz
        8
    sudoz  
       2017-01-12 17:14:39 +08:00
    @kutata effective python 里说了,不要过度使用列表推导,改用 for 循环嵌套就用 for 嵌套
    octopus_new
        9
    octopus_new  
       2017-01-12 17:19:26 +08:00   ❤️ 1
    如果你认同在 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
        10
    spice630  
       2017-01-12 17:25:26 +08:00
    你用 golang 就不会出现这么无用的问题了
    kutata
        11
    kutata  
       2017-01-12 17:28:35 +08:00
    @sudoz 啊,刚入门,还在熟悉语法中~
    gladuo
        12
    gladuo  
       2017-01-12 17:32:50 +08:00   ❤️ 2
    phrack
        13
    phrack  
       2017-01-12 18:17:15 +08:00 via Android
    总结起来还真不好说,可能结合几个例子会合适点。我自己感觉的话就是,一个算法的几个代码实现中比较简洁又不会过于依赖语法糖导致难懂的那个。
    hahastudio
        14
    hahastudio  
       2017-01-12 18:24:56 +08:00
    能用原生语法、标准库的,就用那些
    loading
        15
    loading  
       2017-01-12 18:27:14 +08:00 via Android
    @spice630 对,只要查一下 if err != nil 的数量就行,哈哈。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1444 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:46 · PVG 00:46 · LAX 08:46 · JFK 11:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.