Python中的“ @”

一、介绍

这是Python装饰器的语法,使用@符号,表示将装饰器函数放在被装饰函数的上方。当调用被装饰函数时,实际上是调用了装饰器函数,装饰器函数可以在调用被装饰函数之前或之后执行一些额外的操作。

cpp 复制代码
#funA 作为装饰器函数
def funA(fn):
    #...
    fn() # 执行传入的fn参数
    #...
    return '...'

@funA
def funB():

实际上,上面程序完全等价于下面的程序:

python 复制代码
def funA(fn):
    #...
    fn() # 执行传入的fn参数
    #...
    return '...'

def funB():
    #...
funB = funA(funB)

二、实例

定义一个装饰器

python 复制代码
def decorator_function(original_function):
    def wrapper_function():
        print("装饰器函数执行前的操作")
        original_function()
        print("装饰器函数执行后的操作")
    return wrapper_function

@decorator_function
def hello():
    print("Hello, World!")

hello()

如果去掉被装饰函数的调用

python 复制代码
def decorator_function(original_function):
    def wrapper_function():
        print("装饰器函数执行前的操作")
        # original_function()
        print("装饰器函数执行后的操作")
    return wrapper_function

@decorator_function
def hello():
    print("Hello, World!")

hello()

是不是很奇怪为什么没打印hello, world!

因为它等于以下代码

python 复制代码
def decorator_function(original_function):
    def wrapper_function():
        print("装饰器函数执行前的操作")
        # original_function()
        print("装饰器函数执行后的操作")
    return wrapper_function


def hello():
    print("Hello, World!")

hello = decorator_function(hello)

hello()

参考:

Python中的" @"(@)符号有什么作用?_p15097962069的博客-CSDN博客

https://www.cnblogs.com/satire/p/15112770.html

相关推荐
西西弗Sisyphus8 分钟前
全面掌握Python时间处理
python·time
小梁不秃捏2 小时前
深入浅出Java虚拟机(JVM)核心原理
java·开发语言·jvm
java1234_小锋2 小时前
一周学会Flask3 Python Web开发-http响应状态码
python·flask·flask3
我不是程序猿儿3 小时前
【C】识别一份嵌入式工程文件
c语言·开发语言
奔跑吧邓邓子3 小时前
【Python爬虫(12)】正则表达式:Python爬虫的进阶利刃
爬虫·python·正则表达式·进阶·高级
码界筑梦坊4 小时前
基于Flask的京东商品信息可视化分析系统的设计与实现
大数据·python·信息可视化·flask·毕业设计
软件开发技术局4 小时前
撕碎QT面具(8):对控件采用自动增加函数(转到槽)的方式,发现函数不能被调用的解决方案
开发语言·qt
pianmian14 小时前
python绘图之箱型图
python·信息可视化·数据分析
csbDD4 小时前
2025年网络安全(黑客技术)三个月自学手册
linux·网络·python·安全·web安全
周杰伦fans5 小时前
C#中修饰符
开发语言·c#