簡體   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