装饰器

装饰器

  1. 装饰器的作用:

在不修改函数的情况下给函数添加新的功能
2. ##### 什么是装饰器

装饰器的本质就是一个函数(这个函数是一个实参高阶函数,也是返回值高阶函数)
无参装饰器

def 函数名1(函数名2:
   def 函数名3*args,**kwarge)
        新功能代码
        返回值 = 函数名2*args,**kwargs)
         return 返回值
     return 函数名3
说明:

函数名1 - 装饰器名字,命名的时候和这个装饰器要添加的功能相关联
函数名2 - 随便命名,指向被添加功能的函数;可以命名成fn
函数名3 - 随便命名,在原函数上添加完新功能后产生的函数
新功能代码 - 实现新加功能的代码

写一个装饰器,在函数开始执行前打印开始之前打印’函数开始’

def ff_add(add):
    def ff_add1(*args,**kwargs):
        print('函数开始')
        result = add(*args,**kwargs)
        return result
    return ff_add1

@ff_add
def ff_sum(num1,num2):
    print(num1 + num2)
ff_sum(100,200)

@ff_add
def factorial(n):
    sum1 = 1
    for i in range(1,n+1):
        sum1 *= i
    return sum1
print(factorial(10))

补充:定义函数的时候:*args,**kwargs同时存在的意义 - 不定长参数在调用的时候既可以使用位置参数,也可以使用关键字参数

练习1:写一个装饰器,将所有返回值是字符串的函数中所有小写字母,换成大写字母

def ff_upper(fn):
    def upper1(*args,**kwargs):
        result = fn(*args,**kwargs)
        # a = ''
        if type(result) == str:
            return result.upper()
            # for i in result():
            #     if 'a' <= i <= 'z':
            #         b = chr(ord(i) - 32)
            #         a += result
            #     else:
            #         a += i
            #     return a
        else:
            return result
    return upper1

@ff_upper
def str1():
    return 'abc'
print(str1())

相当于:定义一个函数

def str_func():
    return 'abc'
str_func = ff_upper(str_func)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值