详解python中@的用法


Posted in Python onMarch 27, 2019

python中@的用法

@是一个装饰器,针对函数,起调用传参的作用。
有修饰和被修饰的区别,‘@function'作为一个装饰器,用来修饰紧跟着的函数(可以是另一个装饰器,也可以是函数定义)。

代码1

def funA(desA):
 print("It's funA")

def funB(desB):
 print("It's funB")

@funA
def funC():
 print("It's funC")

结果1

It's funA

分析1

@funA 修饰函数定义def funC(),将funC()赋值给funA()的形参。
执行的时候由上而下,先定义funA、funB,然后运行funA(funC())。
此时desA=funC(),然后funA()输出‘It's funA'。

代码2

def funA(desA):
 print("It's funA")

def funB(desB):
 print("It's funB")

@funB
@funA
def funC():
 print("It's funC")

结果2

It's funA
It's funB

分析2

@funB 修饰装饰器@funA,@funA 修饰函数定义def funC(),将funC()赋值给funA()的形参,再将funA(funC())赋值给funB()。
执行的时候由上而下,先定义funA、funB,然后运行funB(funA(funC()))。
此时desA=funC(),然后funA()输出‘It's funA';desB=funA(funC()),然后funB()输出‘It's funB'。

代码3

def funA(desA):
 print("It's funA")

 print('---')
 print(desA)
 desA()
 print('---')

def funB(desB):
 print("It's funB")

@funB
@funA
def funC():
 print("It's funC")

结果3

It's funA
< function funC at 0x000001A5FF763C80 >
It's funC
It's funB

分析3

同上,为了更直观地看参数传递,打印desA,其传的是funC()的地址,即desA现在为函数desA()。
执行desA()即执行funC(),desA=desA()=funC()。

代码4

def funA(desA):
 print("It's funA")

def funB(desB):
 print("It's funB")
 print('---')
 print(desB)

@funB
@funA
def funC():
 print("It's funC")

结果4

It's funA
It's funB
None

分析4

上面将funC()作为参数传给funA,那么funA(funC())怎么传给funB()呢?打印desB,发现并没有参数传递。
是否可以理解为当‘装饰器' 修饰 ‘装饰器'时,仅是调用函数。

以上所述是小编给大家介绍的python中@的用法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python简单文本处理的方法
Jul 10 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
Nov 06 Python
利用pyuic5将ui文件转换为py文件的方法
Jun 19 Python
Python从列表推导到zip()函数的5种技巧总结
Oct 23 Python
python数值基础知识浅析
Nov 19 Python
pycharm双击无响应(打不开问题解决办法)
Jan 10 Python
Python类中self参数用法详解
Feb 13 Python
解决jupyter notebook 前面书写后面内容消失的问题
Apr 13 Python
在Django中自定义filter并在template中的使用详解
May 19 Python
Numpy中ndim、shape、dtype、astype的用法详解
Jun 14 Python
scrapy中如何设置应用cookies的方法(3种)
Sep 22 Python
使用py-spy解决scrapy卡死的问题方法
Sep 29 Python
详解python列表生成式和列表生成式器区别
Mar 27 #Python
Python3实现的回文数判断及罗马数字转整数算法示例
Mar 27 #Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
Mar 27 #Python
python模块之subprocess模块级方法的使用
Mar 26 #Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
Mar 26 #Python
Python实现的矩阵转置与矩阵相乘运算示例
Mar 26 #Python
深度辨析Python的eval()与exec()的方法
Mar 26 #Python
You might like
《神奇女侠:血脉》神力女超人大战犯罪公司
2020/04/09 欧美动漫
JAVA/JSP学习系列之七
2006/10/09 PHP
thinkphp数据查询和遍历数组实例
2014/11/28 PHP
php将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
js arguments.callee的应用代码
2009/05/07 Javascript
编写Js代码要注意的几条规则
2010/09/10 Javascript
浅析XMLHttpRequest的缓存问题
2013/12/13 Javascript
javascript教程之不完整的继承(js原型链)
2014/01/13 Javascript
javascript实现回到顶部特效
2015/05/06 Javascript
jQuery实现的纵向下拉菜单实例详解【附demo源码下载】
2016/07/09 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
2018/04/26 Javascript
JavaScript多种页面刷新方法小结
2019/04/04 Javascript
Python全局变量用法实例分析
2016/07/19 Python
Python中pillow知识点学习
2018/04/30 Python
python调用OpenCV实现人脸识别功能
2018/05/25 Python
获取Pytorch中间某一层权重或者特征的例子
2019/08/17 Python
python 动态迁移solr数据过程解析
2019/09/04 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
一款利用css3的鼠标经过动画显示详情特效的实例教程
2014/12/29 HTML / CSS
HTML5 Canvas之测试浏览器是否支持Canvas的方法
2015/01/01 HTML / CSS
深入探究HTML5的History API
2015/07/09 HTML / CSS
美国知名运动产品零售商:Foot Locker
2016/07/23 全球购物
美国最大的存储市场:SpareFoot
2018/07/23 全球购物
为什么说Ruby是一种真正的面向对象程序设计语言
2012/10/30 面试题
院领导写的就业推荐信
2014/03/09 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
物流业务员岗位职责
2015/04/03 职场文书
2015年新农村建设指导员工作总结
2015/07/24 职场文书
小学三年级语文教学反思
2016/03/03 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python
ElementUI实现el-form表单重置功能按钮
2021/07/21 Javascript