为什么有些功能pass了

Why do some of functions have pass

在(一些)python 库中,当我查找代码时,我看到一堆函数或 class 方法,它们是这样写的:

def funcName():
    pass

我只想知道这些函数是如何做的,即使它们只有 pass,这意味着该函数不应该做任何事情。

只有 pass 语句的那些 functions/methods 没有做任何特别的事情。 pass 通常是稍后编写的代码的占位符。

您还可以在 类 中找到定义自定义异常的 pass 语句,例如:

class MyException(Exception):
    pass

通常这些是(可能是抽象的)基础 class 中的占位符方法,为派生的 classes 定义模板。

python 中的函数在语法上不能为空。这就是为什么你需要填充它们,通常使用 pass

有时,声明了函数,但故意留空。然后,它们可以在默认实现中使用,但可能被 classes 扩展(继承)库 class.

覆盖

pass 什么都不做。在你实现某些东西之前让代码 运行 是一个填充。这些图书馆可能正在使用 pass 来:

  • 留下空白代码稍后完成
  • 创建最小 class:
  • 暗示一段代码什么都不做
  • 永远循环(什么也不做)

所以对于你关于图书馆的问题,他们可能什么都不做。 pass 本身几乎和空白行一样好,但可以与功能语句混合以实现工作模块。但是你问题中的函数什么都不做。


假设我想在我的文件中保留一个函数 f,稍后再回来处理它。我可以使用 pass 来避免 IndentationError:

>>> def f():
...     pass
... 
>>> f()
>>> 

如果没有 pass,我会:

>>> def f():
... 
  File "<stdin>", line 2
    
    ^
IndentationError: expected an indented block after function definition on line 1
>>> 

这在the offical docs中也有解释:

The pass statement does nothing. It can be used when a statement is required syntactically but the program requires no action. For example:

>>> while True:
...     pass  # Busy-wait for keyboard interrupt (Ctrl+C)
...

Python pass是一个空语句,以保持程序结构的完整性。 Pass 什么都不做,一般用作占位语句。执行传递时没有任何反应。结果没有操作。

假设我们有一个尚未实现的循环或函数,但我们希望在将来实现它。他们不能有空 body。解释器会报错。因此,我们使用 pass 语句构造一个什么都不做的 body。

对于user-defined函数,pass意味着什么都不做,但是对于一些库函数(包括third-party库),通常意味着它们的逻辑不是用纯Python代码写的,如NumPy和Python标准库,为了追求高效运行,大部分函数都是用C语言编写的,并提供相应的Python接口。