python重点语法总结(二)----@操作符
来源:互联网 发布:2017科幻电影推荐知乎 编辑:程序博客网 时间:2024/06/06 21:02
2、@操作符
@符号用于修饰函数,该修饰符后面接一个函数名后,在第下一行再接一个函数定义,这个函数定义可以是模块或类方法,不允许修饰类。修饰符@加一个函数名相当于该函数,同时将后面修饰的函数作为参数传递,需要返回一个可以调用的函数,并且这个返回的函数与修饰的函数名同名。下面通过几个实例进行解释:
实例1:
def decorator(decorated_function):
print("hello, wang shuo")
@decorator
def decorated_funciton(a,b):
print(a+b)
输出:
hello, wang shuo
修饰函数在定义时就会执行,因为前面说道@后面的函数会将修饰的函数decorated_function作为参数,同时返回一个可以调用的函数,这个返回的函数与修饰的函数同名。所以在定义时就要执行,因为需要返回一个可调用的函数。所以,在定义时执行了print("hello, wang shuo"),但是,由于没有返回可以调用的东西,所以通过@修饰后就没有可以调用的东西,调用decorated_function(a,b)是不行的,因为通过@修饰后它代表的是decorator返回的内容,由于没有返回,也就无法调用,所以这种情况调用decorated_function(3,4)会报错。TypeError: 'NoneType' object is not callable
实例2:
def decorator(decorated_function):
print("hello, wang shuo first time")
def actual_function(*args):
print("hello,wang shuo second time")
return actual_function
@decorator
def decorated_function(a,b):
print(a+b)
print("meet wang shuo")
decorated_function(2,3)
输出:
hello, wang shuo first time
meet wang shuo
hello,wang shuo second time
这里首先输出了“hello, wang shuo first time”,说明在执行print之前就执行了decorator函数中的内容,该函数返回一个可以调用的内容,即actual_function,于是,被@修饰过的函数就变成了这个actual_fuction,于是在调用decorated_function(2,3)时依然输出“hello,wang shuo second time”,即actual_function中的内容。
实例3:
def decorator(dec_fun):
print("hello, wang shuo first time")
def actual_function(*args):
print("hello,wang shuo second time")
dec_fun(*args)
return actual_function
@decorator
def decorated_function(a,b):
print(a+b)
print("meet wang shuo")
decorated_function(2,3)
输出:
hello, wang shuo first time
meet wang shuo
hello,wang shuo second time
5
可以看到这次输出了a+b的内容,这是因为在actual_function中调用的被修饰的函数,因为被修饰的函数作为参数传递给函数decorator,而在返回的函数中调用了这个函数dec_fun(*args),所以在使用decorated_function过程中也会使用该函数的功能。
总结:
通过@修饰的函数能够执行那些内容不是看被修饰函数的内容,而是需要看用来修饰的函数的内容,即decorator,它的返回可调用的内容才是最终的执行函数,在调用这个被修饰的函数(decorated_function)时,就会调用decortor返回的可调用的部分。- python重点语法总结(二)----@操作符
- python重点语法总结(一)---- lambda表达式
- python重点语法总结(三)----*和**的作用
- 计算机组成原理重点总结(二)
- python基本操作总结(二)
- 日语三级重点语法总结
- scala 重点语法总结
- 数据库重点知识总结(二)
- Python基础语法(二)
- python基本语法(二)
- Python 基础语法(二)
- Verilog 语法总结(二)
- 《More Effective C++》重点摘要二:操作符
- 日语三级考试重点语法总结
- python学习(二):python基本语法
- python总结(二)
- Python 总结(二)
- C++语法基础--顺序容器(二)--容器常用操作,迭代器失效总结
- redis的主从复制(读写分离)/哨兵(主从切换)配置
- JAVA并发编程笔记
- Android 颜色透明度计算
- 我要变为上帝了-人类简史
- 集合List中消除重复值与取得两个List中的交、并、差集
- python重点语法总结(二)----@操作符
- Unity3D脚本依赖RequireComponent(自动添加关联的脚本)
- Mysql主从配置,读写分离
- dbf文件的解析方法
- python通过配置文件连接mysql
- Parallel.ForEach
- MYSQL --Subquery returns more than 1 row查询结果多于一行
- java学习知识积累-Mybatis中Mapper内置方法细解
- ov7725鹰眼