我在学习Python的过程中,我已经到了关于pass语句的部分。我正在使用的指南将其定义为通常用作占位符的空语句。
但我还是不太明白这是什么意思。pass语句将被使用的简单/基本情况是什么?为什么需要它?
我在学习Python的过程中,我已经到了关于pass语句的部分。我正在使用的指南将其定义为通常用作占位符的空语句。
但我还是不太明白这是什么意思。pass语句将被使用的简单/基本情况是什么?为什么需要它?
当前回答
除了“我不想要任何东西到这里”的“主要”用途之外,我刚刚发现了一个,假设gen是一个迭代器:
i = 0
obj = None
for i, obj in enumerate(gen):
pass
这将在一次传递中获得gen生成的最后一个对象和gen的长度。(有点类似于C语言中以分号结尾的while循环,仔细想想吧。)
其他回答
如果你想导入一个模块,如果它存在,并且忽略导入它,如果该模块不存在,你可以使用下面的代码:
try:
import a_module
except ImportError:
pass
# The rest of your code
如果您避免编写pass语句并继续编写其余代码,则会引发IndentationError,因为打开except块后的行没有缩进。
首先,如果你想写一个block,像这样:
if statement:
pass
for i in range(abc):
pass
def func():
pass
pass can是一个占位符。
其次,它可以让你与IDE“交流”: 当你想让你的IDE像这样递减缩进: 如果你的程序写在这里:
class abc(parent):
def __init__(self, params):
self.params=params
if d:
return
else:
return
# cursor in there
现在你的缩进计数是2,但你希望它在下一行是1。 你可以输入一个pass,你的程序是这样的:
class abc(parent):
def __init__(self, params):
self.params=params
if d:
return
else:
return
pass# cursor in there
并返回。它会让你快乐:
class abc(parent):
def __init__(self, params):
self.params=params
if d:
return
else:
return
pass
# cursor in there
现在缩进计数是1。
除了“我不想要任何东西到这里”的“主要”用途之外,我刚刚发现了一个,假设gen是一个迭代器:
i = 0
obj = None
for i, obj in enumerate(gen):
pass
这将在一次传递中获得gen生成的最后一个对象和gen的长度。(有点类似于C语言中以分号结尾的while循环,仔细想想吧。)
一个可以“按原样”使用的常见用例是重写一个类来创建一个类型(在其他方面与超类相同),例如。
class Error(Exception):
pass
因此,您可以引发并捕获Error异常。这里重要的是异常的类型,而不是内容。
最好和最准确的理解pass的方式是显式地告诉解释器什么都不做。以同样的方式输入以下代码:
def foo(x,y):
return x+y
意思是“如果我调用函数foo(x, y),将标签x和y所代表的两个数字相加并返回结果”,
def bar():
pass
意思是“如果我调用函数栏(),什么都不做。”
其他答案都很正确,但它也适用于一些不涉及占位的事情。
例如,在我最近编写的一段代码中,有必要对两个变量进行除法,并且除数可能为零。
c = a / b
显然,如果b为零,将产生一个ZeroDivisionError。在这种特殊情况下,在b为零的情况下,让c为零是理想的行为,所以我使用了以下代码:
try:
c = a / b
except ZeroDivisionError:
pass
另一种不太标准的用法是为调试器放置断点。例如,我想要一段代码在For语句的第20次迭代时进入调试器。在声明。所以:
for t in range(25):
do_a_thing(t)
if t == 20:
pass
在传递时使用断点。