详解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 面向对象 成员的访问约束
Dec 23 Python
进一步了解Python中的XML 工具
Apr 13 Python
Python利用IPython提高开发效率
Aug 10 Python
Python读取mat文件,并保存为pickle格式的方法
Oct 23 Python
使用python 打开文件并做匹配处理的实例
Jan 02 Python
Python的Lambda函数用法详解
Sep 03 Python
使用tensorflow显示pb模型的所有网络结点方式
Jan 23 Python
详解Python3中的 input() 函数
Mar 18 Python
python 牛顿法实现逻辑回归(Logistic Regression)
Oct 15 Python
Python如何批量生成和调用变量
Nov 21 Python
Python爬取网站图片并保存的实现示例
Feb 26 Python
Python干货实战之八音符酱小游戏全过程详解
Oct 24 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中for循环语句的几种变型
2007/03/16 PHP
PHP读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
php的urlencode()URL编码函数浅析
2011/08/09 PHP
php命令行写shell实例详解
2018/07/19 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
在线编辑器中换行与内容自动提取
2009/04/24 Javascript
jQuery 性能优化指南(3)
2009/05/21 Javascript
jQuery关于导航条背景切换效果实现示例
2013/09/04 Javascript
Jquery实现遮罩层的方法
2015/06/08 Javascript
jQuery无刷新切换主题皮肤实例讲解
2015/10/21 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
基于javascript实现表格的简单操作
2016/05/21 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
BootStrap Table实现server分页序号连续显示功能(当前页从上一页的结束序号开始)
2017/09/12 Javascript
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
js实现图片上传即时显示效果
2019/09/30 Javascript
vue router 传参获取不到的解决方式
2019/11/13 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
2019/11/24 Javascript
JavaScript图片旋转效果实现方法详解
2020/06/28 Javascript
[00:32]2018DOTA2亚洲邀请赛OpTic出场
2018/04/03 DOTA
[48:26]VGJ.S vs infamous Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
python自动化测试实例解析
2014/09/28 Python
Python随机生成信用卡卡号的实现方法
2015/05/14 Python
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
2019/08/05 Python
PyQt5+python3+pycharm开发环境配置教程
2020/03/24 Python
python 数据分析实现长宽格式的转换
2020/05/18 Python
同程旅游英文网站:LY.com
2018/11/13 全球购物
EJB实例的生命周期
2016/10/28 面试题
学雷锋月活动总结
2014/04/25 职场文书
2014年宣传思想工作总结
2014/12/10 职场文书
遗嘱继承权公证书
2015/01/26 职场文书
2015年全国爱眼日活动方案
2015/05/05 职场文书