Python解包多个返回值时的行长度和格式风格

4 投票
2 回答
2127 浏览
提问于 2025-04-18 00:05

假设有一个函数 some_descriptively_named_function,它会返回一个包含四个值的四元组。我想调用这个函数,同时保持每行不超过80个字符,并把这四个输出分别放到有意义的变量里:

some_desc_name1, some_desc_name2, some_desc_name3, some_desc_name4 = some_descriptively_named_function() 

一种方法是:

some_desc_name1, some_desc_name2, some_desc_name3, some_desc_name4 = (
    some_descriptively_named_function()
)

不过,四个值都拆开后,这样写可能也会超出行长度限制。如果我还想对每个参数做个简短的注释,那就更难排版了。

下面的方法可以实现,但不太清楚这样做算不算好或很糟糕。

(some_desc_name1, # Comment 1
 some_desc_name2, # Comment 3
 some_desc_name3, # Comment 3
 some_desc_name4  # Comment 4
) = some_descriptively_named_function()

这样做确实能保持行长度,但在行首的括号让人有点困惑,不知道PEP8(Python的编码风格指南)对此有什么规定。

有没有什么公认的(希望与PEP8相关的)Python风格指南可以参考呢?

2 个回答

0

如果一个函数返回的是一个元组,那这些值通常是相关的,所以不需要对每个值单独进行注释。这样的描述放在函数定义里可能更合适。你提到的第一个选项是最好的解决方案,它可以快速把函数的结果分配给四个不同的变量。还有一个选择就是直接把整个元组当作一个变量来使用:

some_desc_name1 = some_descriptively_named_function()
print some_desc_name1[0] # Comment 1
5

你的格式看起来不错,但有几点建议:

(some_desc_name1,
 some_desc_name2,
 some_desc_name3,
 some_desc_name4) = some_descriptively_named_function()
  • 把调用的函数单独提出来,这样会更清楚。
  • 不要对解包后的变量进行注释。some_descriptively_named_function() 的文档说明应该清楚地定义这些变量。

撰写回答