如何在Python中使用’Pass’语句
在编写程序时,你很少一次性编写所有代码并在最后运行代码。相反,你很可能会编写一些代码,运行程序,再编写一些代码,并重复这个过程,直到完成。
实际上,你将通过关注一些关键部分并省略其他部分来分解和征服你的程序,然后返回填充空白部分。要在Python中有效地执行此操作,你必须使用pass语句,本文的主题。
‘Pass’语句是什么?
与大多数关键字告诉解释器要做某事不同,pass语句是唯一告诉解释器什么都不做的关键字。它用在代码块内部。
在Python中,代码块是缩进在函数、类或控制流语句下的代码行。控制流语句是通过使用条件语句跳过代码或使用循环执行代码来改变程序的正常自上而下执行的语句。Python中常见的控制流关键字是if、for和while。
‘Pass’语句的需要
我之前解释过,pass语句是一个什么都不做的语句。但是在构建一个做某事的程序时,为什么我们需要一个什么都不做的语句呢?在本节中,我将解释pass语句的用例。
#1. 未来实现的占位符
如前所述,在编写程序时,当你只想编写函数的一部分并稍后再编写函数体时,将程序分解和征服是有帮助的。但是如果你尝试运行代码,Python解释器会向你抱怨。这是因为Python期望函数或任何代码块的主体至少包含一个语句。下面是我在Python文件中有的一个示例函数:
def my_function():
# 将稍后编写代码
# 现在没有语句
现在,如果我尝试执行代码,我将得到一个语法错误,类似于:
File "", line 3
# For now there are no statements
^
SyntaxError: incomplete input
如果我们事先编写所有内容,我们的分解和征服策略将不起作用,但是Python需要我们至少写点什么。pass语句在这方面很有帮助。它在技术上是一条语句,因此如果将其包含在一个代码块中,Python不会向你抱怨。然而,它什么都不做,因此你不必担心函数逻辑。下面是带有pass语句的之前的函数。
def my_function():
# 将稍后编写代码
# 现在我们只有pass语句
pass
现在,如果我们运行代码,我们不会得到错误。
你也可以调用该函数来确认它什么都不做。
基本上,这是pass语句在Python中的主要用途 – 作为空代码块的占位符。它不仅适用于函数,还适用于条件语句、循环和类。
#2. 实现抽象类和接口
pass语句还可以用于实现抽象类。抽象类是实现抽象方法的类,而抽象方法是定义但未实现的方法。这类似于上面定义的用例,我们将pass语句用作占位符。然而,与上一个用例不同,pass语句在这种情况下是永久的。
抽象类是定义了从它们继承的超类应该实现的方法的基类。抽象类不实现任何逻辑;它们定义了组成从它们继承的类的方法。因此,您不能直接实例化一个基类。
您可以使用@abstractmethod装饰器和abc包中定义的ABC类来创建Python中的抽象类。如果您对装饰器不熟悉或忘记了,这是一篇关于decorators in Python的文章。
正如我所说,abc包定义了@abstractmethod装饰器和ABC类,我们将按以下方式使用它们:
from abc import (abstractmethod, ABC)
class BasicClass(ABC):
@abstractmethod
def basic_method(self):
# Basic method is a method that any superclass of BasicClass should implement
# So we simply define it here and not implement it
# So in the body we use the pass statement so its valid code
pass
BasicClass继承自ABC类。此外,我们在basic_method周围定义了@abstracmethod装饰器。现在,您可以继承这个类并实现basic_method。
class DerivedClass(BasicClass):
def basic_method(self):
print("Hello from the defined basic method")
然后,您可以实例化这个类并测试运行basic_method。
my_object = DerivedClass()
my_object.basic_method()
当您运行此代码时,应该能够在屏幕上看到写的消息。
Hello from the defined basic method
#3. 捕获异常时什么都不做
当程序在Python中遇到错误时,它会引发异常。异常是具有破坏性的,因为它会导致程序崩溃并停止执行。但是,您可以捕获和处理异常,以防止程序崩溃。如果您不想对错误进行任何特定处理,可以使用pass语句。以下是一个示例:
try:
# code that will definitely raise an exception
raise Exception('Some exception')
except:
pass
如果运行上述代码,什么都不会发生。这是因为异常被引发并由except块中的代码处理。但是该代码什么也不做,所以什么都不会发生。通常,对于异常,您希望记录它们或以合理的方式处理它们。但是如果您想什么都不做,那就是您要做的。
pass语句与break和continue语句有何区别?
您可能会遇到的其他关键字是break和continue。简而言之,我将解释它们的作用,以便您可以看到它们与pass语句的区别。
break语句
break语句用于跳出循环。然后取消循环的每个后续迭代。例如,假设您正在编写一个线性搜索函数。当找到元素时,没有理由继续迭代到列表的末尾。退出循环是有意义的。因此,您将使用break语句。这是一个线性搜索函数的示例:
def linear_search(values, search_value):
for i in range(len(values)):
if values[i] == search_value
print("Value found at index", i)
break
continue语句
continue语句用于跳过循环中的当前迭代。如果正在对一组数字进行迭代,当程序遇到continue语句时,它将停止当前迭代并跳过到下一个迭代。循环继续运行。下面是一个使用continue语句的示例函数。该程序将所有奇数加倍,因此列表只包含偶数。
def make_even(nums):
for i in range(len(nums)):
if nums[i] % 2 == 0:
# 如果数字已经是偶数,我们使用continue跳到下一个迭代
continue
# 只有奇数才会执行到这一步
# 我们将数字加倍,使其变为偶数
nums[i] *= 2
希望通过理解break和continue语句,您能够将它们与pass语句区分开来。
使用pass语句的最佳实践
✅ 记住,pass语句通常用作临时占位符;当准备好实际代码时,请记得将pass语句替换为实际代码。
✅ 如果您使用pass语句用于除临时占位符外的其他任何目的,请包含一个注释,说明为什么要这样做。
最后的话
在本文中,我解释了Python中的pass语句,这是一个有用的关键字,可以在编写代码时进行分治。pass语句也在Python的 documentation中有所涉及。