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

50 投票
7 回答
55465 浏览
提问于 2025-04-17 04:52

我看到在Pinax和其他django应用中,有些代码用的是空的return语句,而不是用pass。这样做有什么区别吗?这会对我正在运行的django代码产生影响吗?这段代码是一个信号方法,自动将推文对象中的标签保存到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 个回答

27

Return 是用来结束当前的函数或方法的。当你使用这个命令时,程序会停止执行这个函数,返回到调用这个函数的地方。Pass 则是一个空操作,它的作用是让程序继续执行下一个语句,什么都不做。

44

这段话展示了一些之前的回答。

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

def r():
  "Executes only the first block."
  if True:
    print(1)
    return
  if True:
    print(2)
    return
89
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

撰写回答