Python 中的 Pie 語法 (@)


Pi 方法或 Pi 語法用於在 Python 中裝飾函式或方法,被稱為裝飾器。Pi 方法用於修改函式或方法的行為。

Pie 語法 (@) 可以透過簡單地在函式定義的上方放置 @ 符號和裝飾器函式的名稱來使用。當函式被呼叫時,Python 會被指示使用裝飾器。

Pie 語法 (@) 具有允許在函式呼叫中實現更多靈活性的優點。在處理複雜資料結構或需要傳入可變數量的引數時,Pie 語法 (@) 允許您將多個引數作為單個引數傳入。這將使您的程式碼更靈活和特定於情況。

語法

@<my_decorator>

方法 1:使用函式裝飾器

示例 1

def my_decor(fun):
   print("Welcome")
   fun()
   print("Tutorialspoint")

@my_decor
def main():
   print("to")

if __name__ == 'main':
   main()

輸出

Welcome
to
Tutorialspoint

在此程式碼中,建立了一個名為 my_decor 的裝飾器函式。此函式繼承並處理另一個名為 fun 的函式。

在此裝飾器函式中,首先鍵入“Welcome”列印歡迎訊息。然後呼叫 fun(),它會執行 fun 函式。最後列印“Tutorialspoint”。

在上面的程式碼中,名為 main 的函式由裝飾器 my_decor 裝飾。因此,main 函式被傳遞給 my_decor,並且 my_decor 函式接收並處理它。my_decor 函式列印歡迎訊息,然後呼叫 main 函式,最後列印“Tutorialspoint”。

如果檢查 __name__ 以檢視程式碼是否僅作為主程式執行。當 main 是程式時,__name__ 將等於“main”,因此呼叫 main 函式。

示例 2

def my_decor1(fun):   # 1st decorator 
   print("---reading---")

def my_decor2(fun):   # 2nd decorator
   print("---Visit---")
   fun()
   print("---for---")

@my_decor1
@my_decor2
def main():
   print("---Tutorialspoint---")

if __name__ == 'main':
   main()

輸出

---Visit---
---Tutorialspoint---
---for---
---reading---

在此程式中,我們提供了三個不同的函式:my_decor1、my_decor2 和 main。這些工作專門用於裝飾。

第一個函式是 my_decor1,我們列印訊息“---reading---”。它在第二個函式 my_decor2 之前執行。

第二個函式是 my_decor2,我們列印訊息“---Visit---”。然後我們呼叫 fun(),它將呼叫 main。main 的列印語句“---Tutorialspoint---”執行。然後我們列印“---for---”。

main 函式以兩種方式進行裝飾。第一個裝飾屬於 my_decor2,第二個裝飾屬於 my_decor1。這意味著要先裝飾 main,my_decor2 函式將執行,然後 my_decor1 函式將執行。最後將列印結果。

方法 2:使用類方法裝飾器

示例 1

class Subject:
   count = 0

   def __init__(self, sub):
      self.sub = sub
      Subject.count += 1

   @classmethod      #class method decorator(@)
   def get_count(dec):
      return dec.count

Subject1 = Subject("Python")
Subject2 = Subject("DBMS")
Subject3 = Subject("HTML")

print(Subject.get_count())

輸出

3

在此程式碼中,我們有一個名為“Subject”的類,它有一個區域性變數“count”。有一個名為 __init__() 的方法,在建立物件時呼叫。此方法設定由這兩個方法返回的成員變數“sub”,並將“Subject.count”遞增 1。

有一個名為 get_count() 的類方法,它返回“Subject”類的成員變數“count”。接下來,我們建立三個“Subject”物件(Subject1、Subject2、Subject3)並分別為它們分配“Python”、“DBMS”和“HTML”成員變數。然後我們列印“Subject.get_count()”,它將輸出“3”。

示例 2

class Team:
   count = 0

   def __init__(self, tm):
      self.tm = tm
      Team.count += 1

   @classmethod     #class method decorator(@)
   def get_count(team):
      return team.count

Team_1 = Team("CSK")
Team_2 = Team("KKR")
Team_3 = Team("RCB")
Team_4 = Team("LSG")

print(Team.get_count())

輸出

4

在此程式碼中,我們建立了一個名為“Team”的類。此類有一個名為“count”的空間數,初始化為 0。此外,此類有一個名為“init”的內部方法,它接受一個名為“tm”的空間引數並將其儲存在“self.tm”中。此外,此方法用於遞增“Team.count”。

接下來,我們建立了一個名為“get_count”的“@classmethod”,它接受一個名為“team”的空間引數作為引數。此方法返回“team.count”。在下一步中,我們從“Team_1”到“Team_4”建立了四個組合,每個組合都有自己的名稱(依次為“CSK”、“KKR”、“RCB”、“LSG”)。

最後,我們使用了“print(Team.get_count())”,它呼叫了“Team”類使用的“get_count”方法。這給了我們“Team”類中建立的組合總數。

結論

總之,Python 中的 (@) 語法是它是一個用於修改或修改函式行為的裝飾器。它允許一個函式被另一個函式編輯。(@)裝飾器由使用者用來更改預設行為,更改類的行為,記錄,快取等。它可以是類,引數,函式或使用者定義的裝飾器,使用 @ 符號在函式上方的裝飾器進行裝飾。

更新時間: 2023-09-29

220 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.