Python函数参数列表格式化

68

如何根据PEP8规范最佳地格式化以下代码:

oauth_request = oauth.OAuthRequest.from_consumer_and_token(consumer,
    token=token, verifier=verifier, http_url=ACCESS_TOKEN_URL)
问题是,如果我将多个参数放在第一行上,该行就会超过79个字符。如果我将每个参数放在单独的一行上,并且使用4个空格进行缩进,看起来相当丑陋:
oauth_request = oauth.OAuthRequest.from_consumer_and_token(
    consumer,
    token=token,
    verifier=verifier,
    http_url=ACCESS_TOKEN_URL)
我想到的最好的选择是增加额外的缩进以更好地区分:
oauth_request = oauth.OAuthRequest.from_consumer_and_token(
                        consumer,
                        token=token,
                        verifier=verifier,
                        http_url=ACCESS_TOKEN_URL)

我试图为自己制定一个通用规则,以便在第一行上使用具有长调用和多个参数的方法,这些参数无法适合单个行。


3
你展示的最后一个例子看起来比它上面的那个不太好看。 - Mateen Ulhaq
1个回答

46

我阅读文档的理解是,2和3两种缩进方式都可接受,但似乎更倾向于使用2(因为在示例中是以2为主,我认为该样式规范未对此作出明确说明)。1不行(请查看第一行下方的Arguments on first line forbidden when not using vertical alignment文档)。


6
我不同意,我更喜欢第三种方法。我喜欢将续行缩进设置得比普通的块结构缩进(4个空格)要大得多,以便于区分它们。通常情况下,我会将继续调用的参数与第一个参数(位于开括号后面)对齐。但在这种情况下(由于空间不足),续行应该对齐在等号后面的单词“oauth”下方。 - Don O'Donnell
1
@Don 嗯,我阅读了文档,它们都可以。我只是注意到在很多例子中使用了2。尽管如此,我认为它与标准4个空格不同。说实话,我更喜欢将所有参数与调用方法的左括号对齐,但这更多取决于我习惯什么而不是固有的“Pythonic”。 - cwallenpoole
1
我也不同意。在您提供的文档中,此帖子中提供的第一个和第二个示例都清楚地列在“否:”部分下,表明它们不应该被使用。为了澄清,每个参数不一定必须在自己的行上提供。但是,当您必须跨多行继续语句时,每行应具有额外(即双倍)缩进以将其与子块或同级块区分开来。最后一个示例在技术上是可接受的,因为有额外的缩进,但最好对于每个额外的行使用8个空格制表符。 - Corey O.
3
我不同意您的看法。PEP8只禁止在函数定义中使用#2。如果您正在调用已定义的函数,则#2是完全可以的。这两种情况都在PEP8中有所示范。 - RayLuo
8
我有20年使用第二种样式的经历,毫无疑问地告诉你,对于我的老眼而言,它是"更少丑陋"的选择。 :-) - moodboom
1
或许我是一个垂直取向的人,我宁愿上下滚动更多,也不愿偶尔左右滑动。 - moodboom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接