社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

在python代码中使用pass语句的目的是什么?[复制品]

Ranjith Udayakumar • 4 年前 • 1226 次点击  

我正在学习python,我已经到达了关于 pass 语句。我使用的指南将其定义为 Null 通常用作占位符的语句。

但我还是不完全明白这意味着什么。有人能告诉我一个简单/基本的情况吗 通过 将使用语句,为什么需要它?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40194
 
1226 次点击  
文章 [ 14 ]  |  最新文章 4 年前
Kamil Cuk
Reply   •   1 楼
Kamil Cuk    5 年前

pass指的是ignore….尽管很简单….如果给定条件为true,下一条语句为pass,则忽略该值或迭代并继续下一行….. 例子

For i in range (1,100):
    If i%2==0:
                  Pass 
    Else:
                  Print(i)

输出:打印1-100之间的所有奇数

这是因为偶数模等于零,因此它忽略这个数并继续到下一个数,因为奇数模不等于零,所以执行循环的其他部分并打印它

DGKarlsson M.K.DHEERAJ
Reply   •   2 楼
DGKarlsson M.K.DHEERAJ    7 年前

python中的pass语句用于语法上需要语句但不希望执行任何命令或代码的情况。

pass语句是一个空操作;当它执行时不会发生任何事情。在代码最终将要运行但尚未编写的地方(例如,在存根中),pass也很有用:

例如:

#!/usr/bin/python

for letter in 'Python': 
   if letter == 'h':
      pass
      print 'This is pass block'
   print 'Current Letter :', letter

print "Good bye!"

这将产生以下结果:

Current Letter : P
Current Letter : y
Current Letter : t
This is pass block
Current Letter : h
Current Letter : o
Current Letter : n
Good bye!

如果字母值为“h”,则前面的代码不执行任何语句或代码。当您创建了代码块但不再需要它时,pass语句很有帮助。

然后可以删除块中的语句,但让块保留pass语句,这样就不会干扰代码的其他部分。

Edward Tyler
Reply   •   3 楼
Edward Tyler    8 年前

这里有一个例子,我从一个列表中提取特定的数据,在这个列表中,我有多个数据类型(这就是我在r中所说的——如果命名错误的话很抱歉),我只想提取整数/数字,而不是字符数据。

数据看起来像:

>>> a = ['1', 'env', '2', 'gag', '1.234', 'nef']
>>> data = []
>>> type(a)
<class 'list'>
>>> type(a[1])
<class 'str'>
>>> type(a[0])
<class 'str'>

我想删除所有的字母字符,所以我让机器通过对数据进行子集和“传递”字母数据来完成这项工作:

a = ['1', 'env', '2', 'gag', '1.234', 'nef']
data = []
for i in range(0, len(a)):
    if a[i].isalpha():
        pass
    else:
        data.append(a[i])
print(data)
['1', '2', '1.234']
Cameron Sparr
Reply   •   4 楼
Cameron Sparr    11 年前

就像书上说的,我只把它当作临时占位符,

# code that does something to to a variable, var
if var == 2000:
    pass
else:
    var += 1

然后再填写场景 var == 2000

Usagi
Reply   •   5 楼
Usagi    6 年前

老实说,我认为 official Python docs 请详细描述并举例说明:

这个 通过 声明不起作用。当语句在语法上是必需的但程序不需要操作时,可以使用它。例如:

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

这通常用于创建最小类:

>>> class MyEmptyClass: ... pass ...

另一个地方 通过 可用于在处理新代码时作为函数或条件体的占位符,允许您在更抽象的层次上进行思考。这个 通过 被默默忽略:

>>> def initlog(*args): ... pass # Remember to implement this! ...

Harsha Biyani yooknoweb
Reply   •   6 楼
Harsha Biyani yooknoweb    9 年前

pass语句什么也不做。当语句在语法上是必需的但程序不需要操作时,可以使用它。

Deepak Dixit
Reply   •   7 楼
Deepak Dixit    6 年前

你可以这么说 通过 方法 NOP (无操作)操作。在这个例子之后,你会得到一个清晰的画面:

C程序

#include<stdio.h>

void main()
{
    int age = 12;

    if( age < 18 )
    {
         printf("You are not adult, so you can't do that task ");
    }
    else if( age >= 18 && age < 60)
    {
        // I will add more code later inside it 
    }
    else
    {
         printf("You are too old to do anything , sorry ");
    }
}

现在您将如何用python编写它:

age = 12

if age < 18:

    print "You are not adult, so you can't do that task"

elif age >= 18 and age < 60:

else:

    print "You are too old to do anything , sorry "

但是您的代码将给出错误,因为它需要在 否则如果 . 以下是 通过 关键字。

age = 12

if age < 18:

    print "You are not adult, so you can't do that task"

elif age >= 18 and age < 60:

    pass

else:

    print "You are too old to do anything , sorry "

现在我想你明白了。

nmagerko Arijit
Reply   •   8 楼
nmagerko Arijit    7 年前

pass 在python中基本上什么也不做,但与注释不同的是,它不会被解释器忽略。所以你可以在很多地方利用它,让它成为一个占位符:

1:可以在课堂上使用

   class TestClass: 
      pass

2:可以在循环和条件语句中使用:

   if (something == true):  # used in conditional statement
       pass

   while (some condition is true):  # user is not sure about the body of the loop
       pass

3:可用于函数:

   def testFunction(args): # programmer wants to implement the body of the function later
       pass

通过 主要用于程序员现在不想给出实现,但仍然想创建一个特定的类/函数/条件语句,以便以后使用。由于python解释器不允许空白或未实现的类/函数/条件语句,因此它会给出一个错误:

缩进错误:需要缩进的块

通过 可以在这种情况下使用。

dm03514
Reply   •   9 楼
dm03514    11 年前

如果你不知道要在某个代码块中放入什么

try:
   int(someuserinput)
except ValueError:
   pass

我也喜欢在做测试的时候用它。我经常意识到我想测试什么,但不知道怎么做。测试示例与sebastian_oe建议的类似

class TestFunctions(unittest.TestCase):

   def test_some_feature(self):
      pass

   def test_some_other_feature(self):
      pass
Tibo
Reply   •   10 楼
Tibo    11 年前

一个可以按原样使用的常见用例是重写一个类来创建一个类型(在其他方面与超类相同),例如。

class Error(Exception):
    pass

所以你可以举起来抓住 Error 例外情况。这里重要的是异常的类型,而不是内容。

Schilcote
Reply   •   11 楼
Schilcote    10 年前

最好最准确的思考方式 pass 是一种明确告诉翻译什么也不做的方法。以同样的方式执行以下代码:

def foo(x,y):
    return x+y

意思是“如果我调用函数foo(x,y),将标签x和y所代表的两个数字相加并返回结果”,

def bar():
    pass

意思是“如果我调用函数bar(),什么也不做。”

其他的答案是非常正确的,但是对于一些不涉及占位符的事情也是有用的。

例如,在我最近编写的一段代码中,有必要对两个变量进行除法,除数可能为零。

c = a / b

很明显,如果b为零,将产生一个零分错误。在这种特殊情况下,在b为零的情况下,将c保留为零是所需的行为,因此我使用了以下代码:

try:
    c = a / b
except ZeroDivisionError:
    pass

另一个不太标准的用法是为调试器放置断点。例如,我想要一些代码在for的第20次迭代中进入调试器…在声明中。所以:

for t in range(25):
    do_a_thing(t)
    if t == 20:
        pass

在传递时使用断点。

Micah Walter
Reply   •   12 楼
Micah Walter    9 年前

除了用作未实现函数的占位符之外, pass 可用于填写if-else语句(“显式优于隐式”。)

def some_silly_transform(n):
    # Even numbers should be divided by 2
    if n % 2 == 0:
        n /= 2
        flag = True
    # Negative odd numbers should return their absolute value
    elif n < 0:
        n = -n
        flag = True
    # Otherwise, number should remain unchanged
    else:
        pass

当然,在这种情况下,人们可能会使用 return 而不是分配,但在需要突变的情况下,这是最好的。

使用 通过 这里特别有助于提醒未来的维护人员(包括您自己!)不要把多余的步骤放在条件语句之外。在上面的例子中, flag 在两个特别提到的案例中设置,但在 else -病例。不使用 通过 ,未来的程序员可能会 flag = True 从而设置 旗帜 在里面 全部的 病例。


另一个例子是在文件底部经常看到的样板函数:

if __name__ == "__main__":
    pass

在一些档案里,把它放在那里可能会更好 通过 允许以后更容易地编辑,并明确表示当文件单独运行时不会发生任何事情。


最后,如其他答案中所述,在捕获异常时不执行任何操作可能很有用:

try:
    n[i] = 0
except IndexError:
    pass
Zero Piraeus
Reply   •   13 楼
Zero Piraeus    6 年前

python的语法要求是在 if , except , def , class 等)不能为空。然而,空代码块在各种不同的上下文中都很有用,例如下面的示例,这是我见过的最常见的用例。

因此,如果代码块中不应该发生任何事情,则 pass 需要这样一个块才能不产生 IndentationError . 或者,任何语句(包括要评估的术语,如 Ellipsis 字面意义的 ... 或者可以使用字符串,通常是docstring),但是 通过 明确表示实际上什么都不应该发生,也不需要实际评估和(至少暂时)存储在内存中。

  • 忽略(全部或)某种类型的 Exception (示例来自 xml ):

    try:
        self.version = "Expat %d.%d.%d" % expat.version_info
    except AttributeError:
        pass # unknown
    

    注: 忽略所有类型的引发,如下例所示 pandas ,通常被认为是不好的做法,因为它还捕获可能应传递给调用方的异常,例如。 KeyboardInterrupt SystemExit (甚至) HardwareIsOnFireError 你怎么知道你没有在一个定义了特定错误的自定义框上运行,一些调用应用程序会想知道这些错误?).

    try:
        os.unlink(filename_larry)
    except:
        pass
    

    而是至少使用 except Error: 或者在这种情况下最好 except OSError: 被认为是更好的做法。对我安装的所有python模块的快速分析使我发现 except ...: pass 语句捕获所有异常,因此它仍然是python编程中的常见模式。

  • 派生不添加新行为的异常类(例如 scipy ):

    class CompileError(Exception):
        pass
    

    类似地,作为抽象基类的类通常有一个显式的空 __init__ 或者子类应该派生的其他方法。(例如) pebl )

    class _BaseSubmittingController(_BaseController):
        def submit(self, tasks): pass
        def retrieve(self, deferred_results): pass
    
  • 在不关心结果的情况下(从 mpmath ):

    for x, error in MDNewton(mp, f, (1,-2), verbose=0,
                             norm=lambda x: norm(x, inf)):
        pass
    
  • 在类或函数定义中,通常docstring已经作为 强制性声明 作为街区里唯一的东西被处决。在这种情况下,块可以包含 通过 此外 对于docstring,为了表示“这实际上是为了什么也不做”。 聚乙二醇 :

    class ParsingError(Exception): 
        """Error encountered while parsing an ill-formed datafile."""
        pass
    
  • 在某些情况下, 通过 用作占位符来表示此方法/类/if块/…尚未实现,但这将是执行它的地方,尽管我个人更喜欢 省略 字面意义的 为了严格区分这一点和前一个示例中的故意“不操作”。 例如,如果我用粗笔画写一个模型,我可能会写

    def update_agent(agent):
        ... 
    

    其他人可能有的地方

    def update_agent(agent):
        pass
    

    之前

    def time_step(agents):
        for agent in agents:
            update_agent(agent)
    

    以提醒您填写 update_agent 稍后运行函数,但已运行一些测试,以查看其余代码是否按预期运行。(本案的第三种选择是 raise NotImplementedError . 这在两种情况下尤其有用:或者 这个抽象方法应该由每个子类实现,在这个基类中没有通用的方法来定义它 –此函数的名称尚未在此版本中实现,但它的签名将是这样的– )

theUtherSide sebastian_oe
Reply   •   14 楼
theUtherSide sebastian_oe    5 年前

假设您正在设计一个新类,其中包含一些您还不想实现的方法。

class MyClass(object):
    def meth_a(self):
        pass

    def meth_b(self):
        print "I'm meth_b"

如果你不考虑 pass ,代码无法运行。

然后你会得到:

IndentationError: expected an indented block

总而言之, 通过 语句没有什么特别的功能,但它可以充当占位符,如这里所示。