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 · 169 天前 · 2930 次点击
    这是一个创建于 169 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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
    liprais
        1
    liprais  
       169 天前   ❤️ 3
    游标卡尺你值得拥有
    LieEar
        2
    LieEar  
       169 天前
    没啥好办法,所以是“面向游标卡尺编程”。有没有大佬补充
    freshgoose
        3
    freshgoose  
       169 天前
    我们都是左手拿尺,右手打码,一边量一边打
    thinszx
        4
    thinszx  
       169 天前   ❤️ 1
    我写 python 写多了反而觉得好像看大括号不习惯了,我使用的习惯就是尽可能先写类和函数定义,然后再写函数内容,写完一个函数测试没问题就把它折叠起来了

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

    因为很不方便,大括号做代码段的格式化会非常方便,空格就不是那么好办了,而且大括号不会导致 tab 和空格之间的混用问题(虽然很讨厌混用)
    body007
        9
    body007  
       169 天前



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

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

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

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

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

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

    一个道理,缩进层级很多说明你代码设计又问题
    lisxour
        26
    lisxour  
       169 天前
    @lolizeppelin 三四层的很正常好吧
    Goooooos
        27
    Goooooos  
       169 天前
    if a:
    doA()
    doB()

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

    这种情况是最难一眼看出问题的
    Goooooos
        28
    Goooooos  
       169 天前
    @Goooooos
    if a:
    ··doA()
    ··doB()

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