“pass”与Python中的“return None”相同?

2024-05-21 19:20:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经学习python一周了,下面是问题:

代码

def Foo():
    pass

def Bar():
    return None

用法

a = Foo()
print(a)
# None
b = Bar()
print(b)
# None

问题: 一。当我们已经有return None时,为什么需要pass?是否存在return None无法处理但pass可以处理的情况?


Tags: 代码none用法returnfoodefbar情况
3条回答

在像Python这样的语言中,有两种类型的“things”要求值:表达式和语句。表达式是,嗯,表达式,它计算的值。例如,11+1,或者f(x)都是表达式,对某些东西求值。

相比之下,语句并没有“返回”任何东西,相反,它们“作用于环境”。例如,x=3将变量x设置为值3def f(x): return x + 1f的值设置为函数。它不会对任何东西进行“求值”,它会修改当前的求值环境。

考虑到这一点,有时需要一个空语句。出于语法上的原因,Python中有一些地方需要语句,但是如果您不希望这里发生任何事情,那么您可能希望表示发生的事情正是“没有”。一种方法是对表达式求值,而不对其执行任何操作:

def f():
    1

但是随便看一眼,可能会发现这个函数返回1:相反,您可以使用pass作为的显式声明:“不要做任何事情”:

def f():
    pass

现在,还有一个问题:我前面提到过f(x)是一个表达式。但是在上面的两个例子中,我没有放任何return,那么这些evalute用于什么呢?答案是:除非另有说明,否则函数调用返回(即计算结果为)None。所以:

def f():
    pass

def g(x):
    if x > 2:
        return x

def h():
    return None

f() # None
g(3) # 3 -> we explicitely say `return x`
g(1) # None -> no return specified for that path
h() # None -> we explicitely say `return None`

其他人提到pass可以在其他地方使用(例如,在空类中,在异常处理中…)。原因是所有这些都需要一些语句,并且pass允许指定一个空语句。这与函数返回None的事实(除非另有说明)相结合,会导致您观察到的行为(尽管它们在概念上不同)。

pass是一个“空”命令,但是return会停止函数/方法。

示例:

def func():
    do_something()      #executed
    pass
    do_something_else() #also executed

但是:

def func2():
    do_something()      #executed
    return None
    do_something_else() #NOT executed

在第二种情况下,return None是:“停止函数并返回None”。 但是pass就像“转到下一行”

应回答两个问题的示例:

Pass可用于异常处理:

try:
    something()
except:
    pass  # does not return
this_still_executes()

Pass可用于声明没有任何新元素的类:

class CustomError(Exception):
    pass

相关问题 更多 >