详解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 文件管理实例详解
Nov 10 Python
python cx_Oracle的基础使用方法(连接和增删改查)
Nov 19 Python
详解Python中 sys.argv[]的用法简明解释
Dec 20 Python
Python Web程序部署到Ubuntu服务器上的方法
Feb 22 Python
django表单实现下拉框的示例讲解
May 29 Python
python 求1-100之间的奇数或者偶数之和的实例
Jun 11 Python
Django实现基于类的分页功能
Oct 31 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
Feb 21 Python
python实现飞船游戏的纵向移动
Apr 24 Python
python 将列表里的字典元素合并为一个字典实例
Sep 01 Python
基于Python爬取股票数据过程详解
Oct 21 Python
Python利用zhdate模块实现农历日期处理
Mar 31 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数据缓存技术
2007/02/14 PHP
php设计模式 Prototype (原型模式)代码
2011/06/26 PHP
PHP中PDO基础教程 入门级
2011/09/04 PHP
joomla jce editor 解决上传中文名文件失败问题
2013/06/09 PHP
PHP ADODB实现事务处理功能示例
2018/05/25 PHP
JS 无法通过W3C验证的处理方法
2010/03/09 Javascript
简单时间提示DEMO从0开始一直进行计时
2013/11/19 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
老生常谈JavaScript 函数表达式
2016/09/01 Javascript
js获取隐藏元素的宽高
2017/02/24 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
jquery图片放大镜效果
2017/06/23 jQuery
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
vue中使用cropperjs的方法
2018/03/01 Javascript
vue拦截器实现统一token,并兼容IE9验证功能
2018/04/26 Javascript
js事件on动态绑定数据,绑定多个事件的方法
2018/09/15 Javascript
js正则取值的结果数组调试方法
2018/10/10 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
2019/02/20 Javascript
mpvue 页面预加载新增preLoad生命周期的两种方式
2019/10/17 Javascript
Ant Design Pro 下实现文件下载的实现代码
2019/12/03 Javascript
[02:14]完美“圣”典2016风云人物:xiao8专访
2016/12/01 DOTA
python解析xml文件实例分享
2013/12/04 Python
13个最常用的Python深度学习库介绍
2017/10/28 Python
Python 中包/模块的 `import` 操作代码
2019/04/22 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
2019/08/02 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
css3 transform过渡抖动问题解决
2020/10/23 HTML / CSS
彪马荷兰官网:PUMA荷兰
2019/05/08 全球购物
高等教育专业自荐信范文
2014/03/26 职场文书
协议书与合同的区别
2014/04/18 职场文书
学校欢迎标语
2014/06/18 职场文书
2014村书记党建工作汇报材料
2014/11/02 职场文书
2014年城管工作总结
2014/11/20 职场文书
展览会邀请函
2015/02/02 职场文书
公开致歉信
2019/06/24 职场文书