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

Pet*_*ppi 0 python

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

例如,我看到之间的差别很小

while doing_a_thing():
   pass
Run Code Online (Sandbox Code Playgroud)

while doing_a_thing():
   None
Run Code Online (Sandbox Code Playgroud)

我想它的pass可读性稍微高一点,但在我看来,从功能/变量的选择中删除这样一个常用词是一个很糟糕的权衡.

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

Ror*_*ton 7

None已经在Python中有意义了.它不是一个陈述,而是一个价值.它可用于标记尚未具有标准值的变量,或标记为不返回任何内容的函数的"返回值".

因此,使用它作为语句比使用new关键字更令人困惑pass.


Chr*_*sso 5

我要在这里顺带一下罗里。

None是一个值,而pass是一个语句。

例如,如果你想要一个函数的默认值,你会这样做

def my_func(val1, val2=None):
    # Some stuff here
Run Code Online (Sandbox Code Playgroud)

其中None用来表示默认值为val2None。

但是,如果您有课程,您可能会看到pass这样的情况:

class MyClass(object):
    def __init__(self):
        pass
Run Code Online (Sandbox Code Playgroud)

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

不管怎样,pass就是说,“我可以在这里做点什么,但我宁愿不这样做”。并且None是一个实际值,您明确表示“是的,我正在给出这个值None

编辑:
我现在更加了解这种混乱了。

因为你看到了:

class MyClass(object):
    def __init__(self):
        pass
Run Code Online (Sandbox Code Playgroud)

可以写成

class MyClass(object):
    def __init__(self):
        None
Run Code Online (Sandbox Code Playgroud)

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

class MyClass(object):
    def __init__(self):
        12
Run Code Online (Sandbox Code Playgroud)

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