详解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之有容乃大的list(1)
Sep 14 Python
深入解析Python中的集合类型操作符
Aug 19 Python
详解python调度框架APScheduler使用
Mar 28 Python
Python使用progressbar模块实现的显示进度条功能
May 31 Python
Tensorflow 合并通道及加载子模型的方法
Jul 26 Python
python从list列表中选出一个数和其对应的坐标方法
Jul 20 Python
django 类视图的使用方法详解
Jul 24 Python
Pycharm远程调试原理及具体配置详解
Aug 08 Python
python实现音乐播放器 python实现花框音乐盒子
Feb 25 Python
keras .h5转移动端的.tflite文件实现方式
May 25 Python
利用Vscode进行Python开发环境配置的步骤
Jun 22 Python
Python Pandas解析读写 CSV 文件
Apr 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
dedecms中显示数字验证码的修改方法
2007/03/21 PHP
php 注释规范
2012/03/29 PHP
解析PHP可变函数的经典用法
2013/06/20 PHP
解析PHP中$_FILES的使用以及注意事项
2013/07/05 PHP
php中的boolean(布尔)类型详解
2013/10/28 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
Javascript Tab 导航插件 (23个)
2009/06/11 Javascript
jquery multiSelect 多选下拉框
2010/07/09 Javascript
javascript 正则表达式相关应介绍
2012/11/27 Javascript
Javascript实现返回上一页面并刷新的小例子
2013/12/11 Javascript
js获取某元素的class里面的css属性值代码
2014/01/16 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
2014/02/26 Javascript
JavaScript跨域方法汇总
2014/10/16 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
省市选择的简单实现(基于zepto.js)
2016/06/21 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
fullpage.js最后一屏滚动方式
2018/02/06 Javascript
bootstrap下拉框动态赋值方法
2018/08/10 Javascript
js实现web调用摄像头 js截取视频画面
2019/04/21 Javascript
微信小程序button标签open-type属性原理解析
2020/01/21 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
2020/09/29 Javascript
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
对numpy 数组和矩阵的乘法的进一步理解
2018/04/04 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
appium+python adb常用命令分享
2020/03/06 Python
Python RabbitMQ实现简单的进程间通信示例
2020/07/02 Python
复古斯堪的纳维亚儿童服装:Baby go Retro
2017/09/09 全球购物
Linux如何修改文件和文件夹的权限
2013/09/05 面试题
最新党员思想汇报
2014/01/01 职场文书
优秀大学生求职自荐信范文
2014/04/19 职场文书
资助贫困学生倡议书
2014/05/16 职场文书
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang
vue实现列表垂直无缝滚动
2022/04/08 Vue.js
Win11安全功能升级:内置防网络钓鱼功能
2022/04/08 数码科技