首页 > 解决方案 > 自动格式化python代码以将参数放在同一行

问题描述

我真的很讨厌分散代码,我正在查看一堆带有参数和参数的长代码,这些代码占用了很多空间。

    def __init__(self,
                 network,
                 value_coef, 
                 entropy_coef, 
                 lr=None,
                 eps=None,
                 max_grad_norm=None,
                 conv=False):

似乎写它的人强制限制了 50 个字符的行数,我完全不同意。我宁愿它看起来像这样。

    def __init__(self, network, value_coef, entropy_coef, lr=None, eps=None, max_grad_norm=None, conv=False):

还有更多像这样的废话,我想摆脱。

        if self.conv:
            grid_obs = rollouts.grid_obs[:-1]\
                .view(-1, *rollouts.grid_obs.size()[2:])
            dest_obs = rollouts.dest_obs[:-1]\
                .view(-1, *rollouts.dest_obs.size()[2:])
            obs = (grid_obs, dest_obs)

我正在为 python 使用 VS 代码,并且是前 Intellij 用户,并且缺少所有内置的代码格式化代码工具。有人有任何提示吗?我一直在查看 autopep8,但似乎他们缺少该功能。

标签: pythonvisual-studio-codeformattingautopep8

解决方案


首先,这不是 50 个字符的限制,而是 79 个(根据 pep8 约定),并且您希望它的方式不符合 pep8,因为它超过 100 列。

因此,对于第一个片段,您可以采用您不喜欢的方式(这是正确的方式),或者让您的格式化程序知道您希望行长超过 79 列。

对于第二个片段,您可以删除转义字符\并让格式化程序完成其工作。我不认为它是你所说的“胡说八道”,但可以随意使用不同的格式。

Autopep8 或 Black 都运行良好,并且没有缺少任何功能。

如果您安装了其中一个,则必须将正确的键/值对添加到您的 settings.json:

"python.formatting.provider": "autopep8" // (or "black")

例如,如果您使用 autopep8,则可以通过将其添加到 settings.json 文件中来指定所需的行长(在您的情况下为 150):

"python.formatting.autopep8Args": [
    "--line-length=150"
]

也是如此black。在这种情况下,值将是:

"python.formatting.blackArgs": [
    "--line-length=150"
]

使用该参数进行格式化会将您的代码包装到该数量。

您可以使用 alt+shift+f(在 Mac 上)或右键单击编辑器和“格式化文档”来格式化代码。


推荐阅读