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