V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
io
V2EX  ›  Python

原来Python的缩进就是个坑啊

  •  
  •   io · 2013-06-27 14:50:21 +08:00 · 21394 次点击
    这是一个创建于 4162 天前的主题,其中的信息可能已经有所发展或是发生改变。
    刚开始学Python的时候,感觉把代码的外观也当作语法的一部分真是既优美又优雅,但后来越用越发觉,用缩进来表示代码之间的关系让代码变得脆弱不堪,还是花括号比较强壮,只要花括号括对了,空格,TAB随意折腾……
    缩进错误应该是pythoner报错次数最多的错误吧。
    51 条回复    1970-01-01 08:00:00 +08:00
    swulling
        1
    swulling  
       2013-06-27 14:56:00 +08:00
    你需要一个能检查缩进错误的IDE/Editor

    IDE 推荐PyCharm
    Editor 推荐 vim + vim-flake8
    io
        2
    io  
    OP
       2013-06-27 14:59:10 +08:00
    @swulling 没搞过那么高端的玩意儿,一直用Notepad++…… 我试试去
    xzl
        3
    xzl  
       2013-06-27 14:59:18 +08:00
    存在即合理。
    cxshun
        4
    cxshun  
       2013-06-27 15:00:47 +08:00
    缩进的代码看起来是舒服很多的啊,话说如果用TAB来缩进的话,一般问题不大的。
    amyangfei
        5
    amyangfei  
       2013-06-27 15:01:54 +08:00
    用各类pep8 插件还是很舒服的。
    est
        6
    est  
       2013-06-27 15:07:34 +08:00   ❤️ 3
    参考python八荣八耻

    > 缩进错误应该是pythoner报错次数最多的错误吧。

    缩进错误是不合格码农的表现。
    F0ur
        7
    F0ur  
       2013-06-27 15:11:09 +08:00
    同意楼上
    有花括号不代表缩进就可以随意
    如果是TAB、空格混用的问题,建议IDE设置TAB=4个空格这样
    lerry
        8
    lerry  
       2013-06-27 15:21:32 +08:00
    使用配置好的vim 和 sublime ,从没遇到过缩进问题
    aisensiy
        9
    aisensiy  
       2013-06-27 15:22:08 +08:00
    @est
    @F0ur

    可能代码不是你写的,风格不一致也是常有的问题。有的时候是 tab 有的时候是 空格。别人的 repository 你不能会所拿来代码就把所有的都格式化一遍。
    lerry
        10
    lerry  
       2013-06-27 15:22:08 +08:00
    coffee 也是用缩进分割代码层级的
    vigoss
        11
    vigoss  
       2013-06-27 15:23:25 +08:00 via Android   ❤️ 1
    缩进的坑应该是遇到代码块过长超过一屏时实在是不好看
    wenbinwu
        12
    wenbinwu  
       2013-06-27 15:37:57 +08:00
    呵呵,我现在基本上n多天才会看到一个缩进错误
    alexrezit
        13
    alexrezit  
       2013-06-27 15:40:24 +08:00
    @lerry
    看别人的代码很烦. 我平时都是 space * 4 的, 很烦 tab.
    uchan
        14
    uchan  
       2013-06-27 15:57:04 +08:00
    python的脚本是可以整成一行的哦
    yakczh
        15
    yakczh  
       2013-06-27 16:06:51 +08:00
    坑你没商量
    Golevka
        16
    Golevka  
       2013-06-27 16:19:24 +08:00
    为那些可以用CFG描述代码层次的语言编写代码生成器就可以很随意, 但是为python编写的codegen就必须附带一个严格的pretty printer, 因为没有人能帮你自动做pretty printing
    dreampuf
        17
    dreampuf  
       2013-06-27 16:57:31 +08:00
    set shiftwidth=4
    set tabstop=4
    set softtabstop=4
    set expandtab
    set smarttab
    set list
    set list listchars=tab:<+

    从此再也没碰到过缩进问题。
    一旦出现这种问题就需要考虑拆分逻辑

    垠神又会吐槽你们,不就是一个AST构造表达,叫你们瞎折腾,还是好好的回去打你们的小括号去吧!骚年
    loading
        18
    loading  
       2013-06-27 17:02:27 +08:00 via iPhone   ❤️ 1
    notepad++不是理由,我一直都是用它写python的,在"首选项","语言"里选"用空格取代",标签尺寸设为4
    for4
        19
    for4  
       2013-06-27 17:05:48 +08:00
    从这点上来说 golang 是做得最好的语言. 自带个gofmt, 连 import的先后顺序都给自动调整的
    BOYPT
        20
    BOYPT  
       2013-06-27 17:08:08 +08:00
    编辑器都不会玩的好还指望写好代码。
    ushuz
        21
    ushuz  
       2013-06-27 17:21:26 +08:00
    空格和Tab很难处理么?
    把tab设为4个空格,这是良好的习惯,看过pep8的写出来的代码都应该是4个空格缩进。就好像你不会在python里把self写成this一样。
    即使偶尔碰到奇葩,把 \t 替换成4个空格也不难。

    @loading 握手,同用notepad++。
    ericFork
        22
    ericFork  
       2013-06-27 17:24:20 +08:00
    python-mode 自带的 PyLintAuto 配置一个热键,一键 pep8;
    :w 自动进行 pep8 检查,有问题会高亮标出,移过去可以显示原因
    Fedor
        23
    Fedor  
       2013-06-27 17:32:13 +08:00   ❤️ 2
    是让养成代码不规范习惯的人买单的大坑!
    chon
        24
    chon  
       2013-06-27 17:34:35 +08:00 via Android
    > 缩进错误应该是pythoner报错次数最多的错误吧
    正常Python程序员都不会犯缩进错误,自己不会用怪谁…
    ipconfiger
        25
    ipconfiger  
       2013-06-27 17:41:25 +08:00   ❤️ 2
    只有c-c c-v黨的異端才會感覺縮進不對,也只有c-c c-v黨才會在縮進的地方被坑。tab什麼的連個編輯器都設置不正確的,竊以爲比這個高級點的錯誤那還不是一籮筐一籮筐的犯。
    nichan
        26
    nichan  
       2013-06-27 17:50:55 +08:00
    除了刚开始那几次,几乎从来没犯过缩进错误,编辑器会自动帮我缩进的……
    Muninn
        27
    Muninn  
       2013-06-27 17:57:18 +08:00
    大家都是4个空格的
    配置好编辑器从来不会有问题
    你不信可以去github看看
    哪来的那么多问题...
    我反正几乎没报过缩进错误
    yeelone
        28
    yeelone  
       2013-06-27 18:00:18 +08:00   ❤️ 1
    @vigoss 所以尽最大的量,要把函数 保持在二三行之内吧
    lerry
        29
    lerry  
       2013-06-27 19:41:55 +08:00
    @alexrezit 我tab设置的4个空格
    darasion
        30
    darasion  
       2013-06-27 19:45:25 +08:00
    其实python应该一开始设计的时候就:

    硬性规定必须是空格 。
    或者
    硬性规定必须是tab。

    这样就不用纠结到底用哪个了,也不必要争论了。
    hahastudio
        31
    hahastudio  
       2013-06-27 22:32:28 +08:00
    其实我一直认为Python的缩进对程序员来说根本不算要求
    想我学Python之前C就已经是严格缩进的,自己日后看代码多舒服,要不还得自己拆来拆去
    hooluupog
        32
    hooluupog  
       2013-06-27 23:02:26 +08:00
    我觉得end和花括号都比空格缩进强。代码量少了无所谓反而很整洁,代码量大了再混合其他语言代码就弊大于利了。而且ide无法对其自动缩进。。。
    chshouyu
        33
    chshouyu  
       2013-06-27 23:41:47 +08:00
    有严重强迫症的在下表示python的缩进甚得我心
    zealinux
        34
    zealinux  
       2013-06-27 23:43:09 +08:00
    巨讨厌别人没有缩进的代码,即便是标签类的html文件,
    没有一点审美吗,没有一点原则吗。
    darklowly
        35
    darklowly  
       2013-06-28 00:04:05 +08:00
    @chshouyu 我就有代码强迫症,但是我讨厌python的缩进,写出的代码既没有美感,也容易出问题。
    mengzhuo
        36
    mengzhuo  
       2013-06-28 00:14:10 +08:00
    pyflask Pylint各种插件提前检查

    对于Python的缩进就有意见的肯定是代码新手

    不管任何一门语言,统一缩进都是良好的风格
    去看看Linux内核代码(C),Wordpress(PHP),Gnome(JavaScript),哪一个不是良好缩进,else都要保持同一列

    if (){

    } else {

    }

    代码是给后来人看的,不是用来装酷的方便自己写得轻松的
    reusFork
        37
    reusFork  
       2013-06-28 00:28:25 +08:00
    最多?我只碰到过一次,就是第一次维护别人的代码的时候
    caoyue
        38
    caoyue  
       2013-06-28 00:38:35 +08:00
    其实花括号在自动格式化的时候还是挺有用的,但是一旦在一大堆嵌套的括号中间不小心删掉了一个……
    缩进其实不算问题,好的习惯加上编辑器设置很容易解决
    luikore
        39
    luikore  
       2013-06-28 00:58:18 +08:00
    楼主适合用 ruby, 因为省略括号的地方和 python 不同(函数调用)所以不是缩进敏感的...
    ivenvd
        40
    ivenvd  
       2013-06-28 01:19:32 +08:00
    写 Python 缩进有问题的人,写 C 也会忘括号吧。感觉这是有没有良好编码习惯的问题,跟语言无关……
    glume
        41
    glume  
       2013-06-28 02:56:56 +08:00
    超过一页的的确比较坑。
    dahuang7
        42
    dahuang7  
       2013-06-28 03:21:46 +08:00
    楼主只是需要一个适应的过程,目测战火帖。
    wenbinwu
        43
    wenbinwu  
       2013-06-28 03:52:11 +08:00
    其实我不明白为什么说python缩进不好?
    无论是java c 还是ruby这样的,难道就不需要缩进?
    如果发现自己写python总出错,只能说明你写的其他语言的代码也不注意缩进
    cloudaice
        44
    cloudaice  
       2013-06-28 08:39:51 +08:00
    除了开始学习python的时候会碰到因为缩进报错之外,以后很少因为缩进而报错的。当然粘代码之类的话,那缩进报错就多了。
    davepkxxx
        45
    davepkxxx  
       2013-06-28 09:39:13 +08:00
    所以我只用python写小程序,靠java吃饭。
    yanwen
        46
    yanwen  
       2013-06-28 10:03:23 +08:00
    @xzl 这个合理 是合乎理性。并非我们生活中说的合理。
    williamx
        47
    williamx  
       2013-06-28 10:22:55 +08:00
    "用缩进来表示代码之间的关系让代码变得脆弱不堪" lz 这句话说得非常到位!赞!
    mengzhuo
        48
    mengzhuo  
       2013-06-28 10:25:16 +08:00
    @glume
    超过200行的就应该开始考虑拆分了
    Rosicky
        49
    Rosicky  
       2013-06-28 10:28:17 +08:00
    复制代码时经常报错
    soli
        50
    soli  
       2013-06-28 10:31:30 +08:00
    @darasion Python 想用缩进来终结花括号是否应该另起一行的争论,但又带来来使用空格缩进还是用tab缩进的争论。哈哈。
    dorentus
        51
    dorentus  
       2013-06-28 10:51:10 +08:00   ❤️ 1
    即使不用 python,同一个项目的合作者们乃至整个公司也得约定好代码缩进风格的啊(用空格还是 tab、缩进 2 空格还是 4 空格,之类的),不然的话无论是阅读还是整合他人的代码都会出问题。

    所以楼主说的这个在成熟的项目里面根本就不是事。
    zzcflying
        52
    zzcflying  
       2013-06-28 11:11:07 +08:00
    不以美观为标准编写代码的一辈子都是码农。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2772 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 00:21 · PVG 08:21 · LAX 16:21 · JFK 19:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.