链式方法在Python中调用缩进样式

从阅读PEP-8,我知道你应该把右括号放在函数调用的最后一个参数的同一行:

ShortName.objects.distinct().filter( product__photo__stockitem__isnull=False) 

或许,长时间的表情最好是完全避免。 但是,如果这是不可取的, 你将如何去多个链式方法调用? 是否应该closures一个新的线?

 ShortName.objects.distinct().filter( product__photo__stockitem__isnull=False ).values_list('value', flat=True) 

那么没有参数的方法呢? 如何在不用引用中间返回值的情况下将它们写入多行?

 ShortName.objects.distinct( ).filter().values() # looks ugly 

更新 :有一个重复的问题, 如何打破Python中的链式方法的一行? 。 接受的答案表明从jQuery风格开始,每个新行都带有一个点。 作者没有提供任何理由或权威的参考,所以我想获得这种风格或其他select的确认。

在这种情况下,连续字符最好打开括号。

 ShortName.objects.distinct() \ .filter().values() # looks better 

随着方法名称变长以及方法开始引用参数,对这种样式的需求变得更加明显:

 return some_collection.get_objects(locator=l5) \ .get_distinct(case_insensitive=True) \ .filter(predicate=query(q5)) \ .values() 

PEP 8打算用一种常识和一种实际和美丽的眼光来解释。 高兴地违反任何PEP 8指南,导致丑陋或难以阅读的代码。

这就是说,如果你经常发现自己与PEP 8不一致,这可能是一个标志,有可读性问题,超越你select的空白:-)

我认为最好的方法是使用()强制行join,并执行此操作:

 (ShortName.objects.distinct() # Look ma! .filter(product__photo__stickitem__isnull=False) # Comments are allowed .values_list('value', flat=True)) 

这并不理想,但我喜欢它的视觉效果突出,并且使得这个连锁电话是多么的明显。 它允许行结束注释,而\换行符则不行。