在for循环的左侧,长元组接受的Python样式是什么?

时间:2016-03-03 12:17:39

标签: python

我正在遍历许多可能(非常不相关)参数的所有组合。如果我们有7个这样的参数,我们可能会有像

这样的东西
fruit_list = ['apple', 'banana']
letter_list = ['a', 'b', 'c', 'd']
class_list = [SomeClass, AnotherClass]
list_list = ...
dict_list = ...
animal_list = ...
language_list = ...

combinations = itertools.product(fruit_list, letter_list, ...)

for i, (fruit, letter, class_, list_, dict_, animal, language) in enumerate(combinations):
    ...

两个问题:首先,是否有一种更规范的方式来做到这一点?我们可以有许多嵌套for循环,但这同样粗略。其次,如果我们坚持这个,那么在for循环中打破元组最好的样式是什么?我不认为这与PEP 8中的任何内容相符。

3 个答案:

答案 0 :(得分:4)

打破循环中的元组看起来更好:

animations

答案 1 :(得分:1)

我总是这样做的方式是这样的:

for i, (
        fruit,
        letter,
        ...
        language) in enumerate(combinations):
    ...

答案 2 :(得分:1)

PEP8提供了类似情况herehere的示例。 它更倾向于使用括号而不是反斜杠:

  

包装长行的首选方法是使用Python隐含的方法   括号,括号和括号内的行继续。排长龙   可以通过包装表达式来分解多行   括弧。这些应该优先使用反斜杠   换行。

所以,关于你的代码:一旦该行达到79个字符,在括号中的逗号之后将其断开并开始一个新行,将其与左括号对齐,或者使用双缩进(即8个空格)以免混淆for声明及其正文。但是,与括号对齐是首选方式。

在这个特定的例子中,包装如下:

for i, (fruit, letter, class_, list_, dict_, animal, language) in 
        enumerate(combinations):
    ...

考虑到你可能需要打破长元组,例如:

for i, (fruit, letter, class_, 
        list_, dict_, animal, language
        ) in enumerate(combinations):
    ...