繁体   English   中英

pass 语句在函数中的作用?

[英]Role of pass statement inside a function?

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

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

它基本上什么都不做。

它通常用作代码中的占位符; 您会注意到,如果没有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

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 

为什么我们在函数内部两次提到类 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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM