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 次查看

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告