Python 中的 Pie 语法 (@)

pythonserver side programmingprogramming更新于 2023/8/31 22:38:00

Pi 方法或 Pi 语法用于修饰 Python 中的函数或方法,称为修饰器。pie 方法用于修改函数或方法的行为。

只需将 @ 符号和修饰器函数的名称放在函数定义上方,即可使用 Pie 语法 (@)。调用函数时,Python 会指示使用修饰器。

Pie 语法 (@) 的优点是允许函数调用具有更大的适应性。处理复杂的数据结构或需要输入可变数量的参数时,Pie 语法 (@) 允许您将多个参数作为单个参数传递。因此,您的代码将变得更加灵活和针对具体情况。

语法

@<my_decorator>

Method 1: Using Function Decorator

Example 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"。

在上面的代码中,装饰器 my_decor 装饰了一个名为 main 的函数。因此,main 函数被传递给 my_decor,my_decor 函数接收并处理它。my_decor 函数打印欢迎消息,然后调用 main 函数,最后打印"Tutorialspoint"。

将检查 if __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 中的 (@) 语法是用于修改或修改函数行为的装饰器。它允许一个函数被另一个函数编辑。(@) 装饰器由用户用来更改默认行为、更改类的行为、日志记录、缓存等。它可以是类、参数、函数或用户定义的装饰器,使用函数上方带有 @ 符号的装饰器进行装饰。


相关文章