【问题标题】:Dividing Python module into multiple regions将 Python 模块划分为多个区域
【发布时间】:2012-01-06 03:01:21
【问题描述】:

在 C# 中,我们可以使用

创建区域
#region
// some methods
#endregion

有没有办法以类似的方式格式化 python 代码,以便我可以将所有相关方法保存在一个块中?

【问题讨论】:

    标签: python formatting


    【解决方案1】:

    看起来 PyCharm 有,看这里:https://www.jetbrains.com/help/pycharm/2016.1/code-folding.html#using_folding_comments

    对于 Python 文件,支持以下两种样式。您不应该将它们混合在一个文件中。

    #<editor-fold desc="Description">
    ...
    #</editor-fold>
    

    #region Description
    ...
    #endregion
    

    Visual Studio 也接受“区域”

    【讨论】:

    • 不用担心链接,在 PyCharm 中,只需使用 #region 和 #endregion
    • 可以确认这也适用于 VS Code。以#region 开始区域并以#endregion 结束
    • 在 VSCode 和 Pycharm 中使用它……太棒了!谢谢!
    • 可悲的是,似乎重新格式化的 Black 不喜欢两种语法,并且在两种情况下都在 # 之后插入了一个空格
    • PyCharm 似乎可以应付 # 后面的空格。
    【解决方案2】:

    使用Python Tools for Visual Studio,您可以使用:

    #region My Block of Code
    def f1():
        pass
    def f2():
        pass
    #endregion
    

    然后你可以像在 C# 上一样折叠区域。

    【讨论】:

      【解决方案3】:

      我建议你看看PyDev。如果你很好地构建了 Python 代码,那么拥有文档大纲和代码折叠将非常有用。不幸的是,我认为您不能在 C/C++/ObjC (Xcode/CDT) 中执行任意结构,例如 #region C# (VS) 或 #pragma mark。

      【讨论】:

      • 请注意,在 PyDev 中,如果您添加以“#---”开头的注释,该注释应出现在大纲中以帮助您构建内容(您可以在添加该注释块的行)。
      • 是的。仍然与#region 不同,但无论如何都非常有用。
      • 实际上,我发现#region 和 #endregion 在 VSCode 中也能正常工作。
      【解决方案4】:

      为了防止 PyCharm 抱怨 PEP 8 违规使用

      #  region region name here
      your code here
      #  endregion
      

      【讨论】:

        【解决方案5】:

        使用 VS Code,您可以像这样简单地创建区域,甚至可以为区域添加名称:

        #region some name
        #Some very long code
        #endregion
        

        然后可以折叠成以下:

        #region some name...
        

        【讨论】:

        • 您的回答与@DarienPardinas 的回答有何不同?你的答案比你早 4 年,你忘了说你需要 Python 工具来获得这个功能。
        • @DarienPardina 的答案是关于 Visual Studio,我的答案是 VS Code。但是你可能是对的,需要 Python 的 VS Code 扩展 marketplace.visualstudio.com/items?itemName=ms-python.python
        • 很公平。将该链接包含在您的答案中可能会很好。 :)
        • 感谢您,链接现在包含在评论中;)我认为这就足够了。但我非常怀疑是否有人会在没有安装此扩展的情况下在 VS Code 中使用 Python 编写代码。
        【解决方案6】:

        我知道这是一篇较旧的帖子,目前在 1.53.2 版中使用 VS CODE,可以使用 #region [区域名称] [代码块] #endregion [与您输入的区域相同的名称区域的开始]

        #region NameOfRegion
        def name().....
        #endregion NameOfRegion
        

        region retracted expanded region

        【讨论】:

          【解决方案7】:

          在 sublime text 3 中,您可以简单地键入注释并缩进您的代码,就像它在注释下一样,然后您可以像 C# 一样折叠它

          # Region
              (some code here...)
          

          【讨论】:

          • 坏主意,因为取决于解释器,python 中的额外缩进可能是非法的。
          【解决方案8】:

          是的,你可以像我们在 c# 中一样,但请记住,这是针对 pycharm IDE 例子

          #region Description
          ...
          #endregion
          

          参考here

          【讨论】:

            【解决方案9】:

            不需要任何其他工具,我用这个作弊:-

            真=真 如果是真的:

            然后使用基本的编辑器工具折叠 if 语句。

            嵌套它们意味着可以折叠成组的块

            【讨论】:

              【解决方案10】:

              只使用类...不知道为什么这么难

              class MyNewClass:
                  def MyFirstMethod(self):
                      print("MyFirstMethod in MyFirstClass")
              

              这将提供您正在寻找的结构。从 Python 2.6 开始测试和工作

              如果你没有在 Python 中使用过类,你可以像在 c# 中那样调用它们

              x = MyNewClass()
              x.MyFirstMethod()
              

              享受

              【讨论】:

              • 这样的类使用更像是命名空间而不是区域。
              • 不是一个合理的解决方案。以 django 的模型为例。模型通常非常庞大,有大量数据,并且有很多方法可以对这些数据采取行动。一旦模型达到合理的大小,最好将字段划分为更接近它们的方法。使用折叠标签突出区域是一个完美的用途。现在我可以快速确定我应该在哪里放置状态管理的新方法、支付信息的新字段等。
              • 即使使用静态或类方法,您也必须键入更多才能使用方法或属性,使用实例方法或属性,您必须初始化类。因此,要在地区组织课程,您将不得不处理 2 个课程?
              猜你喜欢
              • 2018-05-08
              • 1970-01-01
              • 2020-09-04
              • 1970-01-01
              • 1970-01-01
              • 2023-03-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多