函数内部的pass语句的作用?

时间:2018-08-21 08:28:57

标签: python python-3.x

我是面向对象编程的新手。在定义了一个类之后,我们仅创建对象并尝试访问该类内部的不同变量和函数。在下面的代码中,我想知道为什么我们再次不得不在函数ans中提到类Dataset,然后pass语句的作用是什么?

def read_data_set():
    class Dataset:
        pass
    data_sets = Dataset()
    return(data_sets)
    #Function call
x=read_data_set()
print(x)

4 个答案:

答案 0 :(得分:2)

它基本上什么都不做。

它经常像代码中一样用作占位符;您会注意到,没有pass的代码根本不会运行。

class SomeClass:
    pass # to be filled

这是因为Python期望某些东西在SomeClass的定义之下,但是如果为空,它将引发IndentationError

class SomeClass:
    # to be filled <--- empty
other_function() # <--- IndentationError

当您不想执行任何操作时,它也与try-except一起使用:

try:
    some_stuff()
except SomeException:
    pass # I don't mind this

答案 1 :(得分:2)

pass不执行任何操作,只会使Python缩进正确。


假设您要创建一个空函数,例如:

def empty_func():

empty_func()  # throws IndentationError

让我们尝试在其中添加评论:

def empty_func_with_comment():
    # empty

empty_func_with_comment()  # throws IndentationError

要使其正常工作,我们需要使用pass来修复缩进:

def empty_func_with_pass():
    pass

empty_func_with_pass()  # it works 

答案 2 :(得分:1)

我们为什么在函数中两次提及类Dataset?

第一次

class Dataset:
    pass

该类已定义

和第二个:

data_sets = Dataset()

创建此类的一个实例(一个对象)。就像OP所写的一样:

  

定义类后,我们只需创建对象即可。

由于class只是一个python语句,因此可以在任何地方使用:包括函数体,在这种情况下。因此,这里的类是在每次调用函数read_data_set()时定义的,如果未调用,则根本不会定义。


pass语句的作用是什么?

在此示例中

class Dataset:
    pass

pass语句意味着定义一个没有在其中添加任何成员的类。这意味着该类及其对象仅包含任何类从object派生的一些“默认”函数和变量(即方法和字段)。


通常,当您引入一个新块并将其保留为空时,使用pass

expression:
    pass 

您必须在一个块内至少包含一条指令,这就是为什么有时您需要pass来表示您不想在该块内执行任何操作的原因。对于函数来说确实如此:

def do_nothing():
    pass  # function that does nothing

循环:

for i in collection:  # just walk through the collection
    pass              # but do nothing at each iteration

异常处理:

try:
    do_something()
except SomeException:
    pass    #  silently ignore SomeException

上下文管理器:

with open(filename):    # open a file but do nothing with it
    pass

答案 3 :(得分:0)

pass语句意味着您无需定义构造函数或任何属性即可初始化类。尝试忽略它:您看到的错误是由于python期望以下行属于您的类,并且会认为所使用的缩进不正确。

关于在函数中再次调用类名的事实:这意味着您正在实例化刚刚定义的类。因此,函数返回的是类的对象。