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
chenzw2
V2EX    Python

Python 定义类或函数都没有用大括号,格式岂不是很容易乱掉?

  •  
  •   chenzw2 2024-06-12 15:27:29 +08:00 3630 次点击
    这是一个创建于 486 天前的主题,其中的信息可能已经有所发展或是发生改变。
    class Animal(): # 私有属性 __age = 10 # 构造方法 def __init__(self, name): self.name = name def eat(self, food): self.food = food 

    如上代码,如果稍微少个缩进,整个代码就无法运行,而且有时候难以识别。我常用 IDEA 的 CTRL+SHIFT+F 进行代码格式化,少个缩进整个代码都不好了,大家有什么好的使用经验,刚接触 python 小白一个,勿喷!

    40 条回复    2024-06-26 15:06:00 +08:00
    F281M6Dh8DXpD1g2
        1
    F281M6Dh8DXpD1g2  
       2024-06-12 15:29:50 +08:00   3
    游标卡尺你值得拥有
    LieEar
        2
    LieEar  
       2024-06-12 15:30:13 +08:00
    没啥好办法,所以是“面向游标卡尺编程”。有没有大佬补充
    freshgoose
        3
    freshgoose  
       2024-06-12 15:31:34 +08:00
    我们都是左手拿尺,右手打码,一边量一边打
    thinszx
        4
    thinszx  
       2024-06-12 15:36:40 +08:00   1
    我写 python 写多了反而觉得好像看大括号不习惯了,我使用的习惯就是尽可能先写类和函数定义,然后再写函数内容,写完一个函数测试没问题就把它折叠起来了

    不过我也确实经常遇到折腾老半天最后发现是缩进问题...语言就这样,你还能咋办呢...
    javak
        5
    javak  
       2024-06-12 15:38:31 +08:00
    多写,当你写的足够多了,你就可以一眼就看出缩进问题,就不需要游标卡尺了。
    jianchang512
        6
    jianchang512  
       2024-06-12 15:39:05 +08:00
    除非你是使用记事本的大神,否则任何一个支持 python 的编辑器都能很好的对齐,或者有辅助线
    LK99
        7
    LK99  
       2024-06-12 15:39:27 +08:00
    缩进有问题,换 IDE !
    flyqie
        8
    flyqie  
       2024-06-12 15:41:22 +08:00 via Android
    所以这也是为什么现在许多语言都不这么干了。。

    因为很不方便,大括号做代码段的格式化会非常方便,空格就不是那么好办了,而且大括号不会导致 tab 和空格之间的混用问题(虽然很讨厌混用)
    body007
        9
    body007  
       2024-06-12 15:44:11 +08:00



    vscode 和 idea 都能启用显示空白字符,这样应该容易一些,不过 python 格式就这样,我遇到需要滚动的代码,对齐确实麻烦点。
    customsshen
        10
    customsshen  
       2024-06-12 15:54:40 +08:00
    我个人对于代码优雅的审美观念,就是越少符号越 pythonic
    NoOneNoBody
        11
    NoOneNoBody  
       2024-06-12 15:56:40 +08:00
    报错会提醒是哪一行缩进不对的
    woodfizky
        12
    woodfizky  
       2024-06-12 16:05:08 +08:00   1
    你都用 Idea 了,你试试用 pycharm 呗,缩进这种基础问题 IDE 会帮你找出来报红的。

    ctrl + shift + L 自动格式化
    ctrl + shift + O 自动优化 imports

    也可以装插件。
    woodfizky
        13
    woodfizky  
       2024-06-12 16:07:57 +08:00
    @woodfizky
    不过长代码确实靠缩进定位很蛋疼,但是 IDE 也是贴心的提供了一条竖线可以定位的。
    还有就是分享的时候,某些情况会丢格式,那这样 python 缩进就不见了,代码也乱了。
    sucaiking
        14
    sucaiking  
       2024-06-12 16:14:18 +08:00
    彩虹缩进
    june4
        15
    june4  
       2024-06-12 16:15:51 +08:00
    @NoOneNoBody 那也不一定,除非缩进那行引起了语法错误,但大部分时候可能并没有语法错误,比如 if/while 语句这种
    javazero
        16
    javazero  
       2024-06-12 16:18:09 +08:00
    vscode 的话可以直接规范缩进,习惯之后还是很清晰的
    hackyuan
        17
    hackyuan  
       2024-06-12 16:18:44 +08:00
    刚接触前端时用的 pug 、stylus 也是这样,当时觉得靠缩进很酷与众不同。

    后面代码量上来了,看自己的难受,看别人的根本不想看,就找几个晚上全给它改掉了,真是折磨。
    lingeo
        18
    lingeo  
       2024-06-12 16:21:55 +08:00
    缩进不都是以 4 个空格为单位吗? IDE 基本帮你适配好了,一个 tab 就搞定了,你写其他代码没有养成 tab 缩进习惯吗?
    NoOneNoBody
        19
    NoOneNoBody  
       2024-06-12 16:26:36 +08:00
    @june4 #15
    没有执行错误就只能靠 IDE+扩展,pyright 可以提醒,如果是逻辑错误那就没办法

    其实用括号也有相似问题,我有次 js 也是遇到没有执行错误但结果不对的,查了很久就是括号定位不对之前修改的时候删错了,但碰巧又配对了,结果两个代码块一起执行了
    Sawyerhou
        20
    Sawyerhou  
       2024-06-12 16:29:08 +08:00
    习惯了就好了,用多之后根本不会少缩进,读码也本能反应,偶尔复制粘贴会落个缩进什么的,回头扫一眼就会发现,看起来非常突兀。敲其他大括号语言也强迫症式对齐,不然浑身不舒服。
    yolee599
        21
    yolee599  
       2024-06-12 16:32:41 +08:00
    fields
        22
    fields  
       2024-06-12 16:33:19 +08:00
    设置一下 tab 变成 4 个空格 缩进 py 特色
    InkStone
        23
    InkStone  
       2024-06-12 16:33:47 +08:00
    其实写习惯了并不会有什么困扰,别嵌套太多层,没那么容易写错。

    这玩意儿主要的问题还是:跟现代 IDE 协作不太好。写其它语言很多时候先复制一段代码然后 format 来自动调整,但 python 里就没法这么干
    Nazz
        24
    Nazz  
       2024-06-12 16:33:58 +08:00
    换语言吧, 来学 go
    lolizeppelin
        25
    lolizeppelin  
       2024-06-12 16:47:03 +08:00
    有啥难受的,写作文不是靠缩进分段么

    一个道理,缩进层级很多说明你代码设计又问题
    lisxour
        26
    lisxour  
       2024-06-12 17:27:28 +08:00
    @lolizeppelin 三四层的很正常好吧
    Goooooos
        27
    Goooooos  
       2024-06-12 17:30:14 +08:00
    if a:
    doA()
    doB()

    被改为
    if a:
    doA()
    doB()

    这种情况是最难一眼看出问题的
    Goooooos
        28
    Goooooos  
       2024-06-12 17:30:53 +08:00
    @Goooooos
    if a:
    doA()
    doB()

    被改为
    if a:
    doA()
    doB()
    vialon17
        29
    vialon17  
       2024-06-12 17:37:56 +08:00
    @Goooooos #28 的确,这种代码一旦丢失缩进就很难复原,需要和业务逻辑结合,这也是缩进的最显著弊病之一。
    z1645444
        30
    z1645444  
       2024-06-12 17:57:38 +08:00
    有些论坛和社交软件,发送的代码片段,不知道是发送者自己现场写懒得缩进还是复制过去文本内容被平台格式化导致丢失缩进,发文效果大致 #27 ,如果是不使用一对符号标记作用域的语言,看得难受死
    Donahue
        31
    Donahue  
       2024-06-12 18:12:46 +08:00
    我觉得还好,每个方法尽量不要写太长就还行
    hhhzccc
        32
    hhhzccc  
       2024-06-12 18:15:00 +08:00
    pycharm 会自动显示的。
    shiquda
        33
    shiquda  
       2024-06-12 18:15:54 +08:00
    xgdgsc
        34
    xgdgsc  
       2024-06-12 18:35:35 +08:00
    在其他不用缩进的语言里调也不失为一种方法 https://github.com/JuliaPy/PythonCall.jl
    AV1
        35
    AV1  
       2024-06-13 12:54:47 +08:00
    你就当格式化工具不存在吧,自己一边写代码,一边人肉自己格式化自己写的代码。
    (或许这就是 python 这么设计的初衷
    deplives
        36
    deplives  
       2024-06-13 14:02:47 +08:00
    这个构造方法的注释有点绷不住了
    cybort
        37
    cybort  
       2024-06-13 18:43:07 +08:00 via Android
    ide 给力的话其实差不多,比较长的 c 代码你也不可能去数括号。说白了这个更多是给编译器准备的
    ClericPy
        38
    ClericPy  
       2024-06-13 23:04:12 +08:00
    1. 显示空格
    2. 彩虹缩进
    3. 格式化工具 ruff
    4. linter ,有个 linter 缩进有问题还没运行就标红了
    5. 其他方案
    wryyyyyyyyyyyy
        39
    wryyyyyyyyyyyy  
       2024-06-20 10:20:16 +08:00
    写多了,ide 红线一眼就能看出来
    mcgga
        40
    mcgga  
       2024-06-26 15:06:00 +08:00
    1. IDE 有缩进颜色的插件
    2. 少一些嵌套,缩进的层级自然就少了。两三层及的缩进,完全不影响。要是七八层的,这种代码就有问题,过不了 review
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3605 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 00:13 PVG 08:13 LAX 17:13 JFK 20:13
    Do have faith in what you're doing.
    ubao 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