详解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实现利用最大公约数求三个正整数的最小公倍数示例
Sep 30 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
Nov 23 Python
python在线编译器的简单原理及简单实现代码
Feb 02 Python
分析python动态规划的递归、非递归实现
Mar 04 Python
python+flask实现API的方法
Nov 21 Python
在PyCharm下使用 ipython 交互式编程的方法
Jan 17 Python
python安装numpy和pandas的方法步骤
May 27 Python
python socket 聊天室实例代码详解
Nov 14 Python
pytorch数据预处理错误的解决
Feb 20 Python
Python如何脚本过滤文件中的注释
May 27 Python
Python字符串查找基本操作代码案例
Oct 27 Python
pyqt5蒙版遮罩mask,setmask的使用
Jun 11 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
在字符串中把网址改成超级链接
2006/10/09 PHP
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
关于恒等于(===)和非恒等于(!==)
2007/08/20 Javascript
javascript 学习笔记(八)javascript对象
2011/04/12 Javascript
js replace 与replaceall实例用法详解
2013/08/03 Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
2013/11/11 Javascript
JS去掉第一个字符和最后一个字符的实现代码
2014/02/20 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
2014/05/23 Javascript
nodejs批量修改文件编码格式
2015/01/22 NodeJs
javascript白色简洁计算器
2015/05/04 Javascript
jQuery中的each()详细介绍(推荐)
2016/05/25 Javascript
JS常用倒计时代码实例总结
2017/02/07 Javascript
jQuery插件zTree实现删除树子节点的方法示例
2017/03/08 Javascript
javascript数组去重常用方法实例分析
2017/04/11 Javascript
详解用node编写自己的cli工具
2017/05/23 Javascript
node+express框架中连接使用mysql(经验总结)
2018/11/10 Javascript
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
2019/02/20 jQuery
[jQuery] 事件和动画详解
2019/03/05 jQuery
解决Idea、WebStorm下使用Vue cli脚手架项目无法使用Webpack别名的问题
2019/10/11 Javascript
vue在响应头response中获取自定义headers操作
2020/07/24 Javascript
python增加矩阵维度的实例讲解
2018/04/04 Python
python 美化输出信息的实例
2018/10/15 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
Django框架模板介绍
2019/01/15 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
python 如何将数据写入本地txt文本文件的实现方法
2019/09/11 Python
Python实现转换图片背景颜色代码
2020/04/30 Python
详解Flask前后端分离项目案例
2020/07/24 Python
使用canvas对多图片拼合并导出图片的方法
2018/08/28 HTML / CSS
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
党员干部廉洁承诺书
2014/05/28 职场文书
家庭财产分割协议范文
2014/11/24 职场文书
地道战观后感400字
2015/06/04 职场文书
《山中访友》教学反思
2016/02/24 职场文书
HTML基本元素标签介绍
2022/02/28 HTML / CSS
Win11黑色桌面背景怎么办?Win11黑色壁纸解决方法汇总
2022/04/05 数码科技