详解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抓取框架 Scrapy的架构
Aug 12 Python
利用Python实现网络测试的脚本分享
May 26 Python
老生常谈python之鸭子类和多态
Jun 13 Python
python3写爬取B站视频弹幕功能
Dec 22 Python
Python中的二维数组实例(list与numpy.array)
Apr 13 Python
Tensorflow使用tfrecord输入数据格式
Jun 19 Python
python 提取key 为中文的json 串方法
Dec 31 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
May 31 Python
检测python爬虫时是否代理ip伪装成功的方法
Jul 12 Python
Django的用户模块与权限系统的示例代码
Jul 24 Python
python多线程与多进程及其区别详解
Aug 08 Python
使用Python实现批量ping操作方法
May 06 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读取目录下所有文件的代码
2008/01/07 PHP
解决CodeIgniter伪静态失效
2014/06/09 PHP
php备份数据库类分享
2015/04/14 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
2015/04/17 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
Yii2实现增删改查后留在当前页的方法详解
2017/01/13 PHP
php session的应用详细介绍
2017/03/22 PHP
php 二维数组快速排序算法的实现代码
2017/10/17 PHP
javascript之ESC(第二类混淆)
2007/05/06 Javascript
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
javascript 按键事件(兼容各浏览器)
2013/12/20 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
JavaScript编写推箱子游戏
2015/07/07 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
2016/05/09 Javascript
React组件的三种写法总结
2017/01/12 Javascript
Angular中ng-options下拉数据默认值的设定方法
2017/06/21 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
2018/02/01 Javascript
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
详解nodejs 配置文件处理方案
2019/01/02 NodeJs
vue-cli3.X快速创建项目的方法步骤
2019/11/14 Javascript
python 实现网上商城,转账,存取款等功能的信用卡系统
2016/07/15 Python
Python 从列表中取值和取索引的方法
2018/12/25 Python
python实现自动解数独小程序
2019/01/21 Python
对python字典过滤条件的实例详解
2019/01/22 Python
对Python3 解析html的几种操作方式小结
2019/02/16 Python
如何使用Python实现自动化水军评论
2019/06/26 Python
对django的User模型和四种扩展/重写方法小结
2019/08/17 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
请解释一下webService? 如何用.net实现webService
2014/06/09 面试题
大学生专科学习生活的自我评价
2013/12/07 职场文书
函授自我鉴定范文
2014/02/06 职场文书
青年文明号创建承诺
2014/03/31 职场文书
苏州园林导游词
2015/02/03 职场文书