详解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深入学习之装饰器
Aug 31 Python
详解Python import方法引入模块的实例
Aug 02 Python
Numpy数组转置的两种实现方法
Apr 17 Python
python实现读取大文件并逐行写入另外一个文件
Apr 19 Python
Python实现的求解最小公倍数算法示例
May 03 Python
python操作mysql代码总结
Jun 01 Python
详解python里的命名规范
Jul 16 Python
Pyspark获取并处理RDD数据代码实例
Mar 27 Python
为什么python比较流行
Jun 19 Python
Pytorch上下采样函数--interpolate用法
Jul 07 Python
基于CentOS搭建Python Django环境过程解析
Aug 24 Python
Django实现drf搜索过滤和排序过滤
Jun 21 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
基于Zookeeper的使用详解
2013/05/02 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
javascript中的location用法简单介绍
2007/03/07 Javascript
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
JavaScript高级程序设计 客户端存储学习笔记
2011/09/10 Javascript
最短的IE判断var ie=!-[1,]分析
2014/05/28 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
2015/12/10 Javascript
一些实用性较高的js方法
2016/04/19 Javascript
JavaScript导航脚本判断当前导航
2016/07/12 Javascript
基于jQuery实现咖啡订单管理简单应用
2017/02/10 Javascript
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
2017/06/13 jQuery
ES6中的Promise代码详解
2017/10/09 Javascript
JS实现为动态添加的元素增加事件功能示例【基于事件委托】
2018/03/21 Javascript
详解redis在nodejs中的应用
2018/05/02 NodeJs
JavaScript门道之标准库
2018/05/26 Javascript
vue-socket.io接收不到数据问题的解决方法
2020/05/13 Javascript
vue实现顶部菜单栏
2020/11/08 Javascript
在centos7中分布式部署pyspider
2017/05/03 Python
Python3 socket同步通信简单示例
2017/06/07 Python
Python内置函数delattr的具体用法
2017/11/23 Python
Python实现将数据写入netCDF4中的方法示例
2018/08/30 Python
Python初学者需要注意的事项小结(python2与python3)
2018/09/26 Python
python实现五子棋小程序
2019/06/18 Python
深入了解Django View(视图系统)
2019/07/23 Python
python Web flask 视图内容和模板实现代码
2019/08/23 Python
简单了解python字符串前面加r,u的含义
2019/12/26 Python
Python selenium模拟手动操作实现无人值守刷积分功能
2020/05/13 Python
html5简单示例_动力节点Java学院整理
2017/07/07 HTML / CSS
如何用JQuery进行表单验证
2013/05/29 面试题
文科教师毕业的自我评价
2014/01/16 职场文书
人力资源管理专业自荐书范文
2014/02/10 职场文书
党风廉政承诺书
2014/03/27 职场文书
MySQL之MyISAM存储引擎的非聚簇索引详解
2022/03/03 MySQL
ipad隐藏软件app图标方法
2022/04/19 数码科技
HttpClient实现文件上传功能
2022/08/14 Java/Android