详解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程序员鲜为人知但你应该知道的17个问题
Jun 04 Python
Python 序列化 pickle/cPickle模块使用介绍
Nov 30 Python
Python生成8位随机字符串的方法分析
Dec 05 Python
python数据结构之线性表的顺序存储结构
Sep 28 Python
python画柱状图--不同颜色并显示数值的方法
Dec 13 Python
Django实现单用户登录的方法示例
Mar 28 Python
Python Pandas分组聚合的实现方法
Jul 02 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
Aug 27 Python
解决import tensorflow as tf 出错的原因
Apr 16 Python
如何安装并在pycharm使用selenium的方法
Apr 30 Python
如何使用Python处理HDF格式数据及可视化问题
Jun 24 Python
Python使用xpath实现图片爬取
Sep 16 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
关于PHP中Object对象的笔记分享
2011/06/28 PHP
PHP中的命名空间相关概念浅析
2015/01/22 PHP
thinkPHP使用post方式查询时分页失效的解决方法
2015/12/09 PHP
PHP fclose函数用法总结
2019/02/15 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
JavaScript 监听textarea中按键事件
2009/10/08 Javascript
关于javascript DOM事件模型的两件事
2010/07/22 Javascript
JQuery 选择和过滤方法代码总结
2010/11/19 Javascript
给js文件传参数(详解)
2014/07/13 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
js实现动态加载脚本的方法实例汇总
2015/11/02 Javascript
快速掌握jQuery插件WebUploader文件上传
2016/11/07 Javascript
vue中keep-alive的用法及问题描述
2018/05/15 Javascript
微信小程序实现动态获取元素宽高的方法分析
2018/12/10 Javascript
微信小程序提交form操作示例
2018/12/30 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
如何使用 vue-cli 创建模板项目
2020/11/19 Vue.js
[01:03:42]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python进阶_浅谈面向对象进阶
2017/08/17 Python
python 文件操作删除某行的实例
2017/09/04 Python
python通过opencv实现批量剪切图片
2017/11/13 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
75条笑死人的知乎神回复,用60行代码就爬完了
2019/05/06 Python
Python使用xpath实现图片爬取
2020/09/16 Python
一个入门级python爬虫教程详解
2021/01/27 Python
python常量折叠基础知识点讲解
2021/02/28 Python
HTML5中外部浏览器唤起微信分享功能的代码
2020/09/15 HTML / CSS
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
党校自我鉴定范文
2013/10/02 职场文书
竞选劳动委员演讲稿
2014/04/28 职场文书
学习雷锋月活动总结
2014/07/03 职场文书
调研座谈会发言材料
2014/08/23 职场文书
门市房租房协议书
2014/12/04 职场文书
2014年小班保育员工作总结
2014/12/23 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书