首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python中的链式方法调用缩进样式

Python中的链式方法调用缩进样式
EN

Stack Overflow用户
提问于 2011-12-31 03:23:46
回答 2查看 68.1K关注 0票数 139

通过阅读PEP-8,我了解到您应该将结束括号放在与函数调用中的最后一个参数相同的行上:

代码语言:javascript
复制
ShortName.objects.distinct().filter(
    product__photo__stockitem__isnull=False)

也许,最好的做法是避免长表达式。但是如果这是不受欢迎的,你怎么处理多个链式方法调用呢?结尾处的paren应该在新行上吗?

代码语言:javascript
复制
ShortName.objects.distinct().filter(
    product__photo__stockitem__isnull=False
).values_list('value', flat=True)

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

代码语言:javascript
复制
ShortName.objects.distinct(
    ).filter().values() # looks ugly

更新:这里有一个关于How to break a line of chained methods in Python?的重复问题。accepted answer提出了一种熟悉的from jQuery风格,即每个新行都以一个点开头。作者没有提供任何理由或权威参考,所以我想确认一下这种风格或另一种选择。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-31 03:29:55

这是一种优先使用行连续字符而不是左括号的情况。

代码语言:javascript
复制
ShortName.objects.distinct() \
         .filter().values()      # looks better

随着方法名变得越来越长以及方法开始接受参数,对这种风格的需求变得越来越明显:

代码语言:javascript
复制
return some_collection.get_objects(locator=l5) \
                      .get_distinct(case_insensitive=True) \
                      .filter(predicate=query(q5)) \
                      .values()

PEP8旨在用常识和实用和美观的眼光来解释。乐于违反任何导致难看或难以阅读的代码的PEP8指南。

也就是说,如果您经常发现自己与PEP 8不一致,这可能是一个迹象,表明存在可读性问题,而不是您选择的空格:-)

票数 224
EN

Stack Overflow用户

发布于 2011-12-31 03:32:42

我认为最好的方法是使用()来强制行连接,并这样做:

代码语言:javascript
复制
(ShortName.objects.distinct() # Look ma!
 .filter(product__photo__stickitem__isnull=False) # Comments are allowed
 .values_list('value', flat=True))

这并不理想,但我喜欢它在视觉上的突出之处,并使调用链变得有点儿明显。它允许行尾注释,而\换行符不允许。

票数 83
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8683178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档