`pass`语句的目的是什么?

时间:2016-05-31 21:40:36

标签: python

似乎pass只是一个非常需要的保留字。 Python可以使用具有单行None语句的约定来完成同样的事情。

例如,我发现

之间差别不大
while doing_a_thing():
   pass

while doing_a_thing():
   None

我认为让pass稍微更具可读性,但在我看来,在从函数/变量的选择中删除这样一个常用词是一个很差的交易。

只是想知道是否有人知道更多我不了解的历史和/或Python使用情况。

2 个答案:

答案 0 :(得分:7)

None已经在Python中有意义了。这不是陈述,而是a value。它可用于标记尚未具有标准值的变量,或用作不返回任何内容的函数的“返回值”。

因此,将其用作语句会比使用新关键字pass更令人困惑。

答案 1 :(得分:4)

我会在这里稍微躲开Rory。

None是一个值,而pass是一个声明。

例如,如果您想要一个函数的默认值,那么

def my_func(val1, val2=None):
    # Some stuff here

其中None用于表示默认值val2为无。

但是,如果您有课程,则可能会以这种方式看到pass

class MyClass(object):
    def __init__(self):
        pass

pass可能在那里,因为您想稍后定义__init__方法,或者表示它对该类没有任何作用。

无论哪种方式,pass都可以说,"我可以在这里做点什么,但我不喜欢"。而None是一个实际值,您明确表示"是的,我给出了这个值None

编辑:
我现在更了解这种困惑。

因为你看到了:

class MyClass(object):
    def __init__(self):
        pass

可以写成

class MyClass(object):
    def __init__(self):
        None

这不是Pythons的说法None相当于pass。简单地说,仅提供value作为无操作,将具有相同的效果。这意味着我也可以这样做:

class MyClass(object):
    def __init__(self):
        12

这当然没有意义,你为什么要把12放在那里?这里的要点是效果是相同的,但在这种情况下的含义是不同的。在很多情况下,Nonepass不可互换,例如默认参数