原来Python的缩进就是个坑啊 - V2EX
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 22050 次点击
    这是一个创建于 4544 天前的主题,其中的信息可能已经有所发展或是发生改变。
    刚开始学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 也是用缩进分割代码层级的
    leveraging
        11
    leveraging  
       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     Solana     2259 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 15:53 PVG 23:53 LAX 07:53 JFK 10:53
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86