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