自动格式化 python 代码以将参数放在同一行

auto formatting python code to put parameters on same line

我真的很讨厌分散代码,我正在看一堆长代码,其中的参数和参数占用了很多 space。

    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,但他们似乎缺少该功能。

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

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

对于第二个代码段,您可以删除转义字符 \ 并让格式化程序完成它的工作。我不认为这是你所说的“无意义”,但请随意以不同的方式设置它的格式。

Autopep8 或 Black 都工作得很好而且它们没有缺少任何功能。

如果您安装了一个或另一个,则必须将正确的 key/value 对添加到您的 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 上)或右键单击编辑器和“格式化文档”。