在Python中,pass和return有什么区别
我看到在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 个回答
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