繁体   English   中英

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

[英]In Python, what is the difference between pass and return

我在 Pinax 和其他 django 应用程序中看到了一些代码,它们使用空的 return 语句而不是 pass。 有什么区别,它会对例如我正在运行的下面的 django 代码产生任何影响吗? 代码是一个信号方法,它自动将hashtags保存到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)
if not instance:
    return # will pass be better or worse here?

更差。 它改变了逻辑。 pass其实就是:什么都不做。 如果你在这里用pass替换return ,控制流将继续,改变代码的语义。

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

void foo()
{
}

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

def foo():

这是pass派上用场的地方:

def foo():
    pass

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

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

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

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

pass将继续执行该方法。 return将终止方法的执行。 关于以下几行,您想将return放在这里。

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

在这里它不会有什么不同。 即使删除整两行也不会改变任何东西。

但无论如何,想象一下你会进一步阐述这个方法。 最好从一开始就选择正确的流程。

这与其说是答案,不如说是评论,但它不适合作为评论。

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情况下会发生else ,对于任何一开始就真正想知道它的人来说。)

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

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

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

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

passreturn上查看 python 文档。 在您当前的代码中,并没有真正的区别(实际上,我会将else完全放在一边)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM