详解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 相关文章推荐
go和python调用其它程序并得到程序输出
Feb 10 Python
python使用socket远程连接错误处理方法
Apr 29 Python
PyQt5每天必学之工具提示功能
Apr 19 Python
Python 输入一个数字判断成绩分数等级的方法
Nov 15 Python
对python 自定义协议的方法详解
Feb 13 Python
python接口自动化(十六)--参数关联接口后传(详解)
Apr 16 Python
python pandas获取csv指定行 列的操作方法
Jul 12 Python
Python Merge函数原理及用法解析
Sep 16 Python
Python尾递归优化实现代码及原理详解
Oct 09 Python
使用Python画了一棵圣诞树的实例代码
Nov 27 Python
用Python 执行cmd命令
Dec 18 Python
超级详细实用的pycharm常用快捷键
May 12 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经典的给图片加水印程序
2006/12/06 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
node.js中的path.join方法使用说明
2014/12/08 Javascript
js实现DOM走马灯特效的方法
2015/01/21 Javascript
jQuery删除一个元素后淡出效果展示删除过程的方法
2015/03/18 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
Vue.js实现价格计算器功能
2020/03/30 Javascript
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
js+SVG实现动态时钟效果
2018/07/14 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
2018/08/13 jQuery
vue首次赋值不触发watch的解决方法
2018/09/11 Javascript
详解JQuery基础动画操作
2019/04/12 jQuery
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
2019/04/29 Javascript
jquery将json转为数据字典的实例代码
2019/10/11 jQuery
Vue实现简单的跑马灯
2020/05/25 Javascript
Python简单计算文件夹大小的方法
2015/07/14 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
python matplotlib 在指定的两个点之间连线方法
2018/05/25 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
Python语言进阶知识点总结
2019/05/28 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
暑假实习求职信范文
2013/09/22 职场文书
《商鞅南门立木》教学反思
2014/02/16 职场文书
护理助产毕业生的求职信
2014/03/02 职场文书
研究生考核个人自我鉴定
2014/03/27 职场文书
公司寄语大全
2014/04/10 职场文书
槐乡的孩子教学反思
2014/04/27 职场文书
销售团队口号大全
2014/06/06 职场文书
师德自我剖析材料范文
2014/10/06 职场文书
2014年医生工作总结
2014/11/21 职场文书
幼儿园园长工作总结2015
2015/05/25 职场文书
浅谈Laravel中使用Slack进行异常通知
2021/05/29 PHP