装饰器特点
1.函数a是作为参数传给另一个函数b
2.要有闭包的特点出现
此时funcb就是一个装饰器
使用装饰器 @装饰器名字
装饰器使用时,先调用装饰器的外层函数,然后在调用被装饰的函数时调用装饰器内层函数
如果装饰器是多层的,先加载离函数最近的函数,最后加载离函数最远的函数
def funcb(funca):
print('装饰器外部函数的打印ok')
def inner_func():
funca()
print('装饰器内部函数的打印ok')
return inner_func
@funcb
def func():
print('函数func')
func()
# 输出结果:
装饰器外部函数的打印ok # 该打印为使用装饰器时的打印,使用装饰器时会默认调用一次外层的装饰器函数funcb
函数func
# 调用fuc函数时的过程:
# 1.将函数func作为参数传递给funcb
# 2.将函数inner_func作为结果返回给函数func
# 3.执行函数func即inner_func,此时在inner_func中,funca既是func,所以会出现这样的打印
装饰器内部函数的打印ok
带参数的装饰器
带参数的装饰器是三层的
最外层的函数负责接收装饰器的参数
里面的内容还是装饰器原本的内容
def func_value(args):
print('接收参数的装饰器函数打印')
def funcb(funca):
print('装饰器外部函数的打印ok')
def inner_func():
funca()
print('装饰器内部函数的打印ok')
print(args)
return inner_func
return funcb
@func_value('装饰器传入的参数')
def func():
print('函数func')
func()
# 输出结果:
接收参数的装饰器函数打印
装饰器外部函数的打印ok # 到此处为使用装饰器的打印输出
函数func # 此处开始为调用被装饰函数的打印输出 相对于上面的函数只是多出了一个接收参数的函数打印
装饰器内部函数的打印ok
装饰器传入的参数
匿名函数
匿名函数的定义格式:lambda [args]:表达式 返回值为一个函数对象
s = lambda x, y: x + y + 1
print(s(5,6))
# 输出结果:
12
将列表里的元素分别进行操作
map()
l = [1, 2, 3]
map_object = map(lambda x: x + 2, l)
for i in map_object:
print(i)
# 输出结果:
3
4
5
对列表中的单数进行加1操作,双数加2操作
l = [1, 2, 3]
# map_object = map(lambda x: x + 2, l)
map_object = map(lambda x: x + 2 if x % 2 == 0 else x + 1, l)
for i in map_object:
print(i)
# 输出结果:
2
4
4
"对列表中的元素进行加减乘除运算的函数
需要导入reduce
from functools import reduce
from functools import reduce
l = [1, 2, 3]
result= reduce(lambda x, y: x - y, l)
print(result)
# 输出结果:
-4 # 结果为1-2-3=-4
返回符合判断条件的值的地址
l = [1, 2, 3]
filter_object = filter(lambda x: x < 2, l)
for i in filter_object:
print(i)
# 输出结果:
1