链式方法在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))
这并不理想,但我喜欢它的视觉效果突出,并且使得这个连锁电话是多么的明显。 它允许行结束注释,而\
换行符则不行。