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
更清楚的地方是在一个donothingexcept
块中。@kindall我想我只是更喜欢pass
,因为我习惯于使用Python的最小类,并且我把它带到了blank init中。这不是一个真正的新用法,只是一个不保存其值的表达式。你可以使用0
或math.pi
或2+2
或“pass”
来达到同样的目的。@kindall:你当然是对的,但我没有时间添加细节。ZWiki已经添加了一些,所以我不需要。我的观点是,使用一个值作为null语句会令人困惑。我知道它可以做到这一点,但在Python中。
class MyClass(object):
def __init__(self):
12