python 装饰器,匿名函数

装饰器特点
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值