通过阅读PEP-8,我了解到您应该将结束括号放在与函数调用中的最后一个参数相同的行上:
ShortName.objects.distinct().filter(
product__photo__stockitem__isnull=False)
也许,最好的做法是避免长表达式。但是如果这是不受欢迎的,你怎么处理多个链式方法调用呢?结尾处的paren应该在新行上吗?
ShortName.objects.distinct().filter(
product__photo__stockitem__isnull=False
).values_list('value', flat=True)
那么无参数方法呢?如何在不引用中间返回值的情况下在多行中编写它们?
ShortName.objects.distinct(
).filter().values() # looks ugly
更新:这里有一个关于How to break a line of chained methods in Python?的重复问题。accepted answer提出了一种熟悉的from jQuery风格,即每个新行都以一个点开头。作者没有提供任何理由或权威参考,所以我想确认一下这种风格或另一种选择。
发布于 2011-12-31 03:29:55
这是一种优先使用行连续字符而不是左括号的情况。
ShortName.objects.distinct() \
.filter().values() # looks better
随着方法名变得越来越长以及方法开始接受参数,对这种风格的需求变得越来越明显:
return some_collection.get_objects(locator=l5) \
.get_distinct(case_insensitive=True) \
.filter(predicate=query(q5)) \
.values()
PEP8旨在用常识和实用和美观的眼光来解释。乐于违反任何导致难看或难以阅读的代码的PEP8指南。
也就是说,如果您经常发现自己与PEP 8不一致,这可能是一个迹象,表明存在可读性问题,而不是您选择的空格:-)
发布于 2011-12-31 03:32:42
我认为最好的方法是使用()来强制行连接,并这样做:
(ShortName.objects.distinct() # Look ma!
.filter(product__photo__stickitem__isnull=False) # Comments are allowed
.values_list('value', flat=True))
这并不理想,但我喜欢它在视觉上的突出之处,并使调用链变得有点儿明显。它允许行尾注释,而\
换行符不允许。
https://stackoverflow.com/questions/8683178
复制相似问题