Python “通过”声明的目的是什么?

Python “通过”声明的目的是什么?,python,Python,似乎pass只是一个不需要的保留字。Python可以使用一行None语句的约定来完成同样的事情 例如,我认为两者之间的差别很小 while doing_a_thing(): pass 及 我想让pass稍微更具可读性,但在我看来,与从函数/变量的选择中删除这样一个常用词相比,这是一个糟糕的权衡 只是想知道是否有人知道更多我不知道的历史和/或Python用法。没有一个在Python中已经有意义了。这不是一份声明,而是一份报告。它可以用来标记一个还没有标准值的变量,或者作为一个不返回任何内容

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

例如,我认为两者之间的差别很小

while doing_a_thing():
   pass

我想让
pass
稍微更具可读性,但在我看来,与从函数/变量的选择中删除这样一个常用词相比,这是一个糟糕的权衡


只是想知道是否有人知道更多我不知道的历史和/或Python用法。

没有一个在Python中已经有意义了。这不是一份声明,而是一份报告。它可以用来标记一个还没有标准值的变量,或者作为一个不返回任何内容的函数的“返回值”


因此,使用它作为语句比使用新的关键字
pass

更容易混淆。我想在这里稍微借用一下Rory

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

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

def my_func(val1, val2=None):
    # Some stuff here
其中
None
用于表示
val2
的默认值为None

但是,如果您有一个类,您可以通过以下方式看到
pass

class MyClass(object):
    def __init__(self):
        pass
其中
pass
可能存在,因为您希望稍后定义
\uuuu init\uuuu
方法,或者表示它对类不做任何操作

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

编辑:
我现在明白了更多的困惑

因为你看到了:

class MyClass(object):
    def __init__(self):
        pass
可以写成

class MyClass(object):
    def __init__(self):
        None
这不是Pythons说
None
在这里等同于
pass
。这只是说只提供一个
值作为no-op将具有相同的效果。这意味着我还可以:

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

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

很可能会认为把值None
比引入一个新语句(
pass
)更令人困惑。是的,这将是需要学习的另一个惯例。但在Python中,我认为趋势(正确的)是关于给予程序员更多的自由,以换取学习和遵循一套合理的约定。好吧,因为我们没有括号来表示某个东西的空体,所以必须包含某种无操作语句。关于为什么“通过”我的观点是,
None
,就其本身而言,就是一个不可操作的声明。因此,真的没有必要引入另一个保留字。如果它能使语言更容易理解/学习,那么可能需要引入一个新的关键字。很好。我的意思是语句,但总是把它当作我自己的占位符。我的观点是,在你的例子中,你可以用
None
替换
pass
,代码的行为也会完全相同。@petacioppi,是的,但我可以用
None
或任何其他值,如
12
替换
pass
。这并不是说
None
在这里等同于
pass
,而是你可以把任何
value
放在
init
下,它什么都不会做。在这种情况下,我认为
return
实际上更清晰。我唯一想说的
pass
更清楚的地方是在一个donothing
except
块中。@kindall我想我只是更喜欢
pass
,因为我习惯于使用Python的
最小类,并且我把它带到了blank init中。这不是一个真正的新用法,只是一个不保存其值的表达式。你可以使用
0
math.pi
2+2
“pass”
来达到同样的目的。@kindall:你当然是对的,但我没有时间添加细节。ZWiki已经添加了一些,所以我不需要。我的观点是,使用一个值作为null语句会令人困惑。我知道它可以做到这一点,但在Python中。
class MyClass(object):
    def __init__(self):
        12