在Python中列表推导或生成器expression式的续行
你应该如何分解很长的列表理解?
[something_that_is_pretty_long for something_that_is_pretty_long in somethings_that_are_pretty_long]
我也曾经在某个地方看到,那些不喜欢用'\'来分解线条的人,却从来不明白为什么。 这背后的原因是什么?
[x for x in (1,2,3) ]
工作正常,所以你可以做任何你喜欢的。 我个人比较喜欢
[something_that_is_pretty_long for something_that_is_pretty_long in somethings_that_are_pretty_long]
\
为什么不被人们理解是因为它出现在一行的末尾 ,或者不突出,或者需要额外的填充,当行长度改变时这个填充必须被修正:
x = very_long_term \ + even_longer_term_than_the_previous \ + a_third_term
在这种情况下,使用parens:
x = (very_long_term + even_longer_term_than_the_previous + a_third_term)
我不反对:
variable = [something_that_is_pretty_long for something_that_is_pretty_long in somethings_that_are_pretty_long]
在这种情况下你不需要\
总的来说,我认为人们会避免\
因为它有点丑,但是如果不是线上的最后一件事情(确保没有空白),就会产生问题。 尽pipe如此,我认为使用它比使用它好得多,这是为了保持线条的长度。
由于在上面的例子中没有必要使用\
,或者使用括号expression式,所以我甚至觉得我甚至需要使用它。
在处理多个数据结构列表的情况下,您还可以使用多个缩进。
new_list = [ { 'attribute 1': a_very_long_item.attribute1, 'attribute 2': a_very_long_item.attribute2, 'list_attribute': [ { 'dict_key_1': attribute_item.attribute2, 'dict_key_2': attribute_item.attribute2 } for attribute_item in a_very_long_item.list_of_items ] } for a_very_long_item in a_very_long_list if a_very_long_item not in [some_other_long_item for some_other_long_item in some_other_long_list ] ]
注意它是如何使用if语句过滤到另一个列表的。 将if语句放在自己的行中也很有用。