[英]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
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
语句的替代。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.