python 函数装饰器_python函数装饰器的用法

本文围绕Python函数装饰器展开,介绍了开闭原则,即软件对象应允许扩展但封闭修改。阐述了函数装饰器三要素,包括不更改原函数、不改变调用方式并能增加功能。还说明了常用场景,如插入日志等,同时给出示例展示单个、多个装饰器使用及装饰器传参情况。

函数装饰器:

开闭原则:在面向对象编程领域中,开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,

但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。

三要素:

1、不能更改原函数

2、不能改变被装饰函数的调用方式

3、满足1、2的情况下给程序增加功能 (这个函数不能动)

定义公式:

常用场景:它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。

多个装饰器同时修饰函数:装饰器执行顺序:从最后一个装饰器开始执行到第一个装饰器

"""

# 简单的装饰器

# def fn(f1):

# def fc():

# print("这里开始对f1函数权限进行验证")

# f1()

# print("f1函数已经处理完毕了")

# return fc

#

# def f1():

# print("这里f1函数的功能展示")

#

# t = fn(f1)

# t()

# 为了可视化和模块化,对上面的同一个功能的高级装饰函数进行统一标识,达到更好的效果

# @fn #这个@fn标识符效果等同于f1=fn(f1)

# 注意这个时候函数不用再这样fn(f1)()的调用了,而是直接使用f1()即可达到fn(f1)()的效果了

# 因为@fn的效果等同于f1=fn(f1),所以直接调用f1()相当于实现了fn(f1)(),进而达到原来的效果。

# def fn(f1):

# def fc():

# print("这里开始对f1函数权限进行验证")

# f1()

# print("f1函数已经处理完毕了")

# return fc

#

# @fn

# def f1():

# print("这里f1函数的功能展示")

#

# f1()

## 多个装饰器装饰被装饰函数的执行顺序

# def makeBold(fun):

# print('----a----')

# def inner():

# print('----1----')

# return '' + fun() + ''

# return inner

#

# def makeItalic(fun):

# print('----b----')

# def inner():

# print('----2----')

# return '' + fun() + ''

# return inner

#

# @makeBold

# @makeItalic

# def test():

# print('----c----')

# print('----3----')

# return 'hello python decorator'

#

# res= test()

# print(res)

## 装饰器传参

# def w_say(fun):

# """

# 如果原函数有参数,那闭包函数必须保持参数个数一致,并且将参数传递给原方法

# 如果被装饰的函数有行参,那么闭包函数必须有参数

# """

# def inner(name):

# print('say inner called')

# fun(name)

# return inner

#

# @w_say

# def hello(name):

# print('hello ' + name)

#

# hello('晓鑫')

# 多个函数使用装饰器 传入多个参数

# def w_add(func):

# def inner(*args, **kwargs):

# print('add inner called')

# func(*args, **kwargs)

# return inner

#

# @w_add

# def add(a, b):

# print('%d + %d = %d' % (a, b, a + b))

#

# @w_add

# def add2(a, b, c):

# print('%d + %d + %d = %d' % (a, b, c, a + b + c))

#

# add(2, 4)

# add2(2, 4, 6)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值