python 修饰器 参数_python 修饰器

本文深入讲解了Python中的修饰器,包括定义、基本实现、问题与解决方案。重点讨论了如何通过wrapper函数实现代码灵活性,以及使用@符号简化调用过程。通过实例说明了如何在不改变原有代码结构下,利用修饰器修改变量名和传递函数作为参数。
摘要由CSDN通过智能技术生成

因困扰自己多时,打算整理一下修饰器到底是什么?

参考资料:http://python.jobbole.com/82344/

修饰器

1. 定义2个函数

2. 基本实现

3. 问题:实现后, 要修改原来代码中的变量名, funcB()改为funcA(funcB)

4. 解决方法:让funcB赋值等于funcA(funcB),用时就是funcB(), 不用修改原来代码, 这个要求需funcA(funcB)返回的是一个函数

a) 所以要返回一个函数,则加一个函数 wrapper(),然后return 函数; 将原来代码写进wrapper(),方便多次调用

5. python的语法糖@, funcB = funcA(funcB),@funcA, 简写代码, 注意写对位置,写在要funcB()的前面

基本实现

def funcA(func):

print('这是11111111')

funcB_copy = func()

return funcB_copy

def funcB():

print('这是2222222222')

funcA(funcB)

funcB()

# 1. 问题:实现后, 要修改原来代码中的变量名, funcB()改为funcA(funcB)

# 2. 解决方法:让funcB赋值等于funcA(funcB),用时就是funcB(), 不用修改原来代码, 这个要求需funcA(funcB)返回的是一个函数

# 所以要返回一个函数,则加一个函数 wrapper(),然后return 函数; 将原来代码写进wrapper(),方便多次调用

def funcA(func):

def wrapper():

print('这是11111111')

funcB_copy = func()

return funcB_copy

return wrapper

def funcB():

print('这是2222222222')

funcB = funcA(funcB) #这是func2 = wrapper()函数

funcA() #func2()执行的是wrapper()

最后python的语法糖@, 将funcB = funcA(funcB)改为 @funcA,简写代码, 注意写对位置,写在funcB()的前面

def funcA(func):

def wrapper():

print('这是11111111')

funcB_copy = func()

return funcB_copy

return wrapper

@funcA

def funcB():

print('这是2222222222')

funcB()

# 原来是带参数函数

def funcA(func):

def wrapper(a, b): # 注意这里

print('这是11111111')

funcB_copy = func(a, b) #注意这里

return funcB_copy

return wrapper

@funcA

def funcB(a, b):

print('这是2222222222')

print(a, b)

funcB()

基本调试几遍就会了

ps:参考资料写的更好

这篇文章不是转载,内容也不是原创,我也不知道选什么(只有原创、转载、翻译), 是参考文章的自己理解版,暂时标为原创,如有不妥请告诉我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值