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
LLaMA
V2EX  ›  Python

Python 一行 import 可以写好几个包,为什么很多 IDE 的 format 都会把我写在一行的自动展开?有什么好处

  •  
  •   LLaMA · 348 天前 · 4321 次点击
    这是一个创建于 348 天前的主题,其中的信息可能已经有所发展或是发生改变。
    30 条回复    2023-04-20 11:47:05 +08:00
    Leviathann
        1
    Leviathann  
       348 天前
    清晰,git 友好
    huangsen365
        2
    huangsen365  
       348 天前 via Android   ❤️ 1
    因为对眼球的运动轨迹也更友好
    insmoin
        3
    insmoin  
       348 天前
    git 友好
    Alias4ck
        4
    Alias4ck  
       348 天前   ❤️ 4
    在 Python 中,确实可以在一行中导入多个包,但许多 IDE 和代码格式化工具(如 PEP 8 、Black 、autopep8 等)会将它们自动展开到多行。这样做主要有以下好处:

    1.可读性:将每个导入语句放在单独的一行可以提高代码的可读性,使其他开发人员更容易理解和跟踪你的代码。当有多个导入时,长的一行代码可能不容易看清楚每个导入。

    2.维护:在单独的一行上列出每个导入包,有助于代码的维护。当需要添加、删除或修改导入时,单行导入使得更改更加明确,减少了出错的可能性。

    3.代码审查和版本控制:将导入语句拆分到多行可以简化代码审查和版本控制。当有多个导入在同一行时,对其中一个导入的更改可能导致整行被标记为已修改,这可能会使得审查变得更加困难。

    4.遵循编码规范:PEP 8 是 Python 编程语言的一种编码规范,它建议将每个导入语句放在单独的一行。遵循这些规范有助于编写整洁、一致的代码,这对于团队协作尤为重要。

    总之,尽管在一行中导入多个包是可行的,但将每个导入分开到单独的一行可以提高代码的可读性、可维护性,并遵循编码规范。因此,许多 IDE 和代码格式化工具会自动将导入语句拆分到多行

    gpt-4 的回复确实很符合事实, 虽然我也用 isort 来处理包的导入, 主要原因是可读性和规范, 剩余两个点它描述的也很不错 涨姿势了
    wu67
        5
    wu67  
       348 天前
    对 git 友好. 如果你哪天改一个了一个 import, 就知道到底是改了哪个, 而不是一整行都被标识改了, 要一个个去对比到底改了哪个
    l4ever
        6
    l4ever  
       348 天前   ❤️ 1
    OP 你好, 我这里是强迫症治疗中心的.
    LaurelHarmon
        7
    LaurelHarmon  
       348 天前   ❤️ 3
    有些贴 GPT 的以为别人没手还是咋
    dayeye2006199
        8
    dayeye2006199  
       348 天前 via Android
    风格问题,一般也不用操心 isort 之类的可以帮你重新排序和组合成你要的 import 风格
    skinny
        9
    skinny  
       348 天前
    因为你没有设置这些 IDE 用的格式化工具的最大行长,或者是以逗号结尾
    e3c78a97e0f8
        10
    e3c78a97e0f8  
       348 天前 via iPhone
    @Alias4ck 你的这个答案我看第一段就猜到是 GPT 生成的。看来 AI 和人类的语言还是有差别。
    Alias4ck
        11
    Alias4ck  
       348 天前   ❤️ 14
    @LaurelHarmon 贴 gpt 生成 下面我没回复我自己的观点? 我只是探讨我的知识边界 有问题? 现在 v2 上讨论问题的人戾气都这么重吗
    lolizeppelin
        12
    lolizeppelin  
       348 天前
    import 本身的顺序是有影响的,比如一些被 import 的模块包含了初始化代码
    一行多个 import 你会忽略顺序问题,也不好找最初始 import 的位置
    ispinfx
        13
    ispinfx  
       348 天前 via iPhone
    @Alias4ck • 请不要把 AI 生成的内容发送到这里

    都不让发了你还发不是找骂??
    vopin
        14
    vopin  
       348 天前   ❤️ 1
    @livid #4 复制 chatGPT
    我记得几个月前的共识是不要复制的,现在规则如何不清楚
    qwerzl
        15
    qwerzl  
       348 天前
    @vopin 他这种还行吧...又不是纯 bot 。还是有输出自己观点的。
    noahhhh
        16
    noahhhh  
       348 天前 via Android
    @LaurelHarmon gpt-4 要钱
    LaurelHarmon
        17
    LaurelHarmon  
       348 天前
    @noahhhh 门槛好高啊
    mingli
        18
    mingli  
       348 天前 via iPhone
    我也觉得 4 楼没什么问题,人又不是单纯的复制粘贴
    fox0001
        19
    fox0001  
       348 天前
    其实,可以问问 ChatGPT
    locoz
        20
    locoz  
       348 天前
    @LaurelHarmon #7 事实还确实就如此,有些人就是“没手”,“有手”就不会就这种问题问人了...且不提月经问题直接搜索能得到一堆同样的答案,在当下 AI 已经具备合格的语言能力时,这种常规月经问题直接让 AI 给答案就是最优解,效率高、内容整理完善、准确度也毫无问题。
    LaurelHarmon
        21
    LaurelHarmon  
       348 天前
    @locoz 嗯嗯,我感觉这种问题直接忽视即可,没啥讨论价值。二话不说直接贴 AI 回复最后在一个角落里说两句无关痛痒上的话(甚至不如全贴 GPT )也很没意思,给社区增加垃圾。
    Alias4ck
        22
    Alias4ck  
       348 天前   ❤️ 3
    @LaurelHarmon 我觉得吧 兄弟你是不是戾气有点重啊
    1: 这个 tag 是在 python 下的吧 是分享和讨论 python 技术的吧 不是用来批判人的吧 只是针对技术的吧 我也没看到你提出你的观点 关于这个 ide 的特性啊
    2: 另外你是谁啊 就动不动上升到讨论价值 社区垃圾? 圣人? 首先别人可能是新人,了解一些 feature 不够及时, 给他们解答 我觉得在这个 tag 下很合理啊
    3: 其次 chatgpt 给的答案很全面 用来做参考有什么问题 你也可以指出它的错误 它本身就是一个辅助工具, 别动不动就 diss , 用来查漏补缺很合理啊 技术讨论不就是要百花齐放吗
    Ocean810975
        23
    Ocean810975  
       347 天前
    @Alias4ck #22
    当时社区讨论的不让用 chatGPT 还是因为可以创造某些看上去十分真实的虚假消息吧。而且我个人觉得 chatgpt 信息密度有的时候很低,尤其是他在做总结的时候,总共就四条的东西还总结一遍。
    也不是非不让用,我觉得自己用挺好的,给别人看就有点灌水的嫌疑了,或许换个 prompt 语气不那么 GPT 会好一些。
    mekingname
        24
    mekingname  
       347 天前
    因为这些 IDE 是按照 Python 代码规范 PEP-8 的要求来格式化代码的。其中就说到了,对于模块级别,应该一行一个来导入。

    import re
    import datetime
    import pandas as pd

    对于同一个模块下面的多个不同函数、类、变量,则允许在一行导入:
    from re import findall, search, sub
    easylee
        25
    easylee  
       347 天前
    @Alias4ck block 就好了,无需多言,站内渣渣多了去了,看到那么多人赞你,心里好受点就行。
    lonccc
        26
    lonccc  
       347 天前 via iPhone
    @LaurelHarmon 你的 3 个不痛不痒的回复就不是为社区添加垃圾吗
    uni
        27
    uni  
       347 天前
    印象中用 yapf 就可以在同一行
    maichael
        28
    maichael  
       346 天前
    @Alias4ck #4 https://www.v2ex.com/about 提醒一下,有可能会被站长 BAN 的
    kaddusabagei38
        29
    kaddusabagei38  
       346 天前
    > 为什么很多 IDE 的 format 都会把我写在一行的自动展开?

    这个东西一般都是可以配置的。
    hhhhhh123
        30
    hhhhhh123  
       343 天前
    import 多个记得加个(). 方便换行
    import (a, ,b ,c d, e)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5335 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 09:26 · PVG 17:26 · LAX 02:26 · JFK 05:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.