详解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 splitlines使用技巧
Sep 06 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
May 29 Python
Python中常用操作字符串的函数与方法总结
Feb 04 Python
Python中 map()函数的用法详解
Jul 10 Python
python将控制台输出保存至文件的方法
Jan 07 Python
利用nohup来开启python文件的方法
Jan 14 Python
Python获取一个用户名的组ID过程解析
Sep 03 Python
python django中8000端口被占用的解决
Dec 17 Python
Python3常见函数range()用法详解
Dec 30 Python
Python发送邮件封装实现过程详解
May 09 Python
Python常用类型转换实现代码实例
Jul 28 Python
Python基于内置函数type创建新类型
Oct 22 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+MySQL 手工注入语句大全 推荐
2009/10/30 PHP
php下使用strpos需要注意 === 运算符
2010/07/17 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
2014/06/12 PHP
Smarty实现页面静态化(生成HTML)的方法
2016/05/23 PHP
PDO::getAvailableDrivers讲解
2019/01/28 PHP
Aster vs KG BO3 第二场2.19
2021/03/10 DOTA
onsubmit阻止form表单提交与onclick的相关操作
2010/09/03 Javascript
读jQuery之八 包装事件对象
2011/06/21 Javascript
NodeJS学习笔记之MongoDB模块
2015/01/13 NodeJs
jQuery常用数据处理方法小结
2015/02/20 Javascript
JS基于Ajax实现的网页Loading效果代码
2015/10/27 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
jQuery Easyui实现左右布局
2016/01/26 Javascript
微信小程序 在Chrome浏览器上运行以及WebStorm的使用
2016/09/27 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
JS变量及其作用域
2017/03/29 Javascript
详解Node.js实现301、302重定向服务
2017/04/07 Javascript
Node.JS文件系统解析实例详解
2017/05/15 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
JavaScript实现的简单加密解密操作示例
2018/06/01 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
python获取android设备的GPS信息脚本分享
2015/03/06 Python
分享Python字符串关键点
2015/12/13 Python
Python装饰器基础详解
2016/03/09 Python
python 数据的清理行为实例详解
2017/07/12 Python
Python迭代器和生成器定义与用法示例
2018/02/10 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
2019/02/13 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
医校毕业生自我鉴定
2014/01/25 职场文书
青年志愿者事迹材料
2014/02/07 职场文书
幼儿园教师师德师风演讲稿:爱我所爱 无悔青春
2014/09/10 职场文书
镇政府副镇长群众路线专题民主生活会对照检查材料
2014/09/19 职场文书
中小学教师继续教育心得体会
2016/01/19 职场文书
预备党员入党思想汇报(范文)
2019/08/14 职场文书