详解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 collections模块实例讲解
Apr 07 Python
Python入门及进阶笔记 Python 内置函数小结
Aug 09 Python
python批量添加zabbix Screens的两个脚本分享
Jan 16 Python
Python3实现的画图及加载图片动画效果示例
Jan 19 Python
python 实现视频流下载保存MP4的方法
Jan 09 Python
Python利用WMI实现ping命令的例子
Aug 14 Python
python统计指定目录内文件的代码行数
Sep 19 Python
在Mac中PyCharm配置python Anaconda环境过程图解
Mar 11 Python
Python爬虫爬取新闻资讯案例详解
Jul 14 Python
python按照list中字典的某key去重的示例代码
Oct 13 Python
Python中Yield的基本用法
Oct 18 Python
详解Python调用系统命令的六种方法
Jan 28 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/06/19 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
10个对初学者非常有用的PHP技巧
2016/04/06 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
原生js获取宽高与jquery获取宽高的方法关系对比
2014/04/04 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
2015/03/18 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
2015/06/14 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
2016/01/05 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
Javascript的无new构建实例详解
2016/05/15 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
Vue使用枚举类型实现HTML下拉框步骤详解
2018/02/05 Javascript
详解基于mpvue的小程序markdown适配解决方案
2018/05/08 Javascript
使用D3.js+Vue实现一个简单的柱形图
2018/08/05 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
Vue自定义全局弹窗组件操作
2020/08/11 Javascript
vue循环中点击选中再点击取消(单选)的实现
2020/09/10 Javascript
Vue 打包的静态文件不能直接运行的原因及解决办法
2020/11/19 Vue.js
对numpy中数组元素的统一赋值实例
2018/04/04 Python
python ---lambda匿名函数介绍
2019/03/13 Python
提升Python程序性能的7个习惯
2019/04/14 Python
Python程序包的构建和发布过程示例详解
2019/06/09 Python
Python 支持向量机分类器的实现
2020/01/15 Python
static关键字的用法
2013/10/07 面试题
大学军训感言
2014/01/10 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
实习证明格式范文
2014/10/14 职场文书
优秀员工自荐书
2015/03/06 职场文书
出纳岗位职责范本
2015/03/31 职场文书
起诉意见书范文
2015/05/19 职场文书
孔繁森观后感
2015/06/10 职场文书
教务处教学工作总结
2015/08/10 职场文书
go 原生http web 服务跨域restful api的写法介绍
2021/04/27 Golang