在Python中,pass和return之间有什么区别

时间:2011-10-24 07:50:01

标签: python

我在Pinax和其他django应用程序中看到了一些代码,而不是传递,使用了一个空的return语句。有什么区别,它会对我正在运行的下面的django代码有什么影响吗?代码是一种信号方法,可以自动将主题标签保存到tweet对象的taggit Tag对象中。

我在这里看到一个问题,关于在PHP中是否使用return语句会对解释的字节码产生影响,但我不确定它是否与Python相关。

import re
TAG_REGEX = re.compile(r'#(?P<tag>\w+)')

def get_tagged(sender, instance, **kwargs):
    """
    Automatically add tags to a tweet object.
    """
    if not instance:
        return # will pass be better or worse here?
    post = instance
    tags_list = [smart_unicode(t).lower() for t in list(set(TAG_REGEX.findall(post.content)))]
    if tags_list:
        post.tags.add(*tags_list)
        post.save()
    else:
        return # will a pass be better or worse here?
post_save.connect(get_tagged, sender=Tweet)

7 个答案:

答案 0 :(得分:61)

if not instance:
    return # will pass be better or worse here?

更糟。它改变了逻辑。 pass实际上意味着:什么也不做。如果你在这里用return替换pass,控制流将继续,改变代码的语义。

pass的目的是创建空块,否则使用Python的缩进方案是不可能的。例如,C中的空函数如下所示:

void foo()
{
}

在Python中,这将是语法错误:

def foo():

这是pass方便的地方:

def foo():
    pass

答案 1 :(得分:18)

Return退出当前的函数或方法。 Pass是一个空操作,允许执行在下一个语句中继续。

答案 2 :(得分:17)

这说明了一些早期的答案。

def p():
  "Executes both blocks."
  if 1:
    print(1)
    pass
  if 1:
    print(2)
    pass

def r():
  "Executes only the first block."
  if 1:
    print(1)
    return
  if 1:
    print(2)
    return

答案 3 :(得分:1)

if not instance:
    return # will pass be better or worse here?

pass将继续执行该方法。 return将终止方法的执行。关于以下几行,您希望将return放在此处。

else:
    return # will a pass be better or worse here?

这里没有什么区别。即使删除整行也不会改变任何内容。

但无论如何,想象一下你会进一步详细说明这个方法。最好从一开始就选择合适的流程。

答案 4 :(得分:1)

这更多是评论而不是答案,但它不适合作为评论。

if not instance:
    return # will pass be better or worse here?

如接受的答案所述,pass不正确。

else:
    return # will a pass be better or worse here?

在这里,由于我们处于函数的末尾,pass会做同样的事情:没有。更好的是完全放弃else条款,因为没有任何事情可做。 (禅宗中的“明确胜于隐性”确实如此,但这很少适用于明确无所作为 - 很明显else案件中发生的事情,对于那些实际上甚至对此一无所知的人来说都是如此。 )

(还不清楚为什么要在函数中将instance重命名为post - 您可以只更改参数名称? - 或者sender参数应该是什么。哦,你实际上并不需要将set转换为list以在列表解析中迭代它。:))

答案 5 :(得分:0)

查看passreturn上的python文档。在你当前的代码中没有什么区别(事实上,我会完全离开else。)

区别主要在于语义:pass可用于语法需要语句但不需要语句的地方。另一方面,return履行一种函数契约,提供明确的结果。

答案 6 :(得分:0)

if not instance:
    return # will pass be better or worse here?

情况会更糟,因为在这种情况下,即使没有 instance,它也会在您定义的函数中执行以下代码行。

pass 有它自己的本质,它用于定义空块,不应将其视为 return 语句的替代。