关于python当中的@修饰符的浅析
https://blog.csdn.net/class_brick/article/details/81170697
要了解python中@装饰器的作用,首先要记住这么几点:
1. 装饰器符号“@”属于语法糖,什么意思呢?就是说,我不按照@装饰器的语法要求来写,而是按照一般python的语法要求来写完全可以。那么用@装饰器的格式来写的目的就是为了书写简单方便
2. 装饰器的作用是什么呢? 简单的理解就是:装饰原有的函数。什么意思呢?比如有一个函数func(a, b),它的功能是求a,b的差值,我现在有一个需求,就是想对函数功能再装饰下,求完差值后再取绝对值,但是不能在func函数内部实现,这时候就需要装饰器函数了,比如func = decorate(func)函数,将func函数作为参数传递给decorate函数,由decorate来丰富func函数,丰富完成后再返回给func,此时func的功能就丰富了。
3.python的常识,函数和其他任何东西一样,都是对象。这意味着可以将函数当做实参传递给函数,或者在函数中将函数作为返回值返回。例码验证:
>>> def add(x, y):
... return x + y
>>> def sub(x, y):
... return x - y
>>> def apply(func, x, y): # 1
... return func(x, y) # 2
>>> apply(add, 2, 1) # 3
3
>>> apply(sub, 2, 1)
1
了解上述观点后,可以先不用@符号来写一个简单的装饰器
def decorate(func):
def inner(a, b):
ret = func(a, b):
return abs(ret)
return inner
def sub(a, b):
return a-b
>>>sub(3, 4)
... -1
>>>sub = decorate(sub)
>>>sub(3, 4)
>>>1
对于sub = decorate(sub)的理解。 最终会将inner的值传给sub ,此时执行sub(3, 4),其实是执行decorate中的inner,所以为1.
那么为了书写方便,将sub=decorate(sub)换为@decorate,并放在sub的定义面前,即:
@decorate
def sub(a, b):
return a-b
只是书写不同,结果相同。
如果上述理解还是很吃力,推荐一个更详细的帖子,看完后你会有更透彻的理解。
http://python.jobbole.com/85056/
相关文章
- Python虚拟环境的安装和配置-virtualenv与windows下多个python版本共存
- Python判断文件是否存在的三种方法
- 【Python成长之路】python 基础篇 -- global/nonlocal关键字使用
- 【Python】python 日期操作
- centos下的python无法打印中文
- 关于Python正则表达式findall函数问题详解
- python使用matplotlib绘制折线图教程
- python 关于celery的异步任务队列的基本使用(celery+redis)【无配置文件设置】
- Python 日期和时间_python 当前日期时间_python日期格式化
- paip.性能跟踪profile原理与架构与本质-- python扫带java php
- paip.编程语言方法重载实现的原理及python,php,js中实现方法重载
- Python语言编程学习:利用python输出当前python版本、MSC版本型号
- Python语言学习之常见语句命令那些事:python和常见语句命令(条件语句、pass语句)使用方法之详细攻略
- Python可视化数据分析01、python环境搭建
- Python发送微信消息(文字、图片、文件)给指定好友和微信群,零基础可看懂(附源码和教程)
- 关于python的mediapipe库踩过的坑-ImportError: DLL load failed while importing _framework_bindings: 找不到指定的模块。
- python 函数练习集锦
- Python实现KNN(K近邻)回归模型(KNeighborsRegressor算法)并应用网格搜索算法寻找最优参数值项目实战
- Python实现直方图梯度提升分类模型(HistGradientBoostingClassifier算法)并基于网格搜索进行优化同时绘制PDP依赖图项目实战
- 【LeetCode Python实现】6. Z 字形变换(中等)
- 【华为OD机试 2023】核酸总最快检测效率(C++ Java JavaScript Python)
- 人生苦短,我用python实现人脸(口罩)识别(几十行代码搞定)
- Python编程:shelve模块-持久化python数据
- Python编程:python面向对象
- python 将一个JSON 字典转换为一个Python 对象
- Python使用技巧(五):快速解决安装python-lxml模块库报错问题并简单使用
- python 绘图 异常点绘制使用 ax.plot(abnormal_points['ds'], abnormal_points['y'], "rX", label='abnormal points')
- 关于OpenCV for Python入门之Dlib实现人脸检测
- 【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
- Python 面向对象编程详解
- Python实现DBScan
- 〖Python语法进阶篇③〗- 进程的创建与常用方法
- 【Python实战】 ---- python 实现 CSDN 的定时自动签到