Python 学习笔记 函数装饰器 & 函数递归 & 栈和队列

一、函数装饰器:

在代码运行期间,可以动态增加函数功能的方式,被称为装饰器【Decorator】

也就是说,在不修改原函数的基础上,给原函数增加功能

好处:在团队开发中,如果两个或者两个以上的程序员会用到相同的功能,但是功能又有细微的差别,采用装饰器:相互不影响,代码简化

1.简单装饰器:

def test():
 print("拼搏到无能为力,坚持到感动自己")

#a.书写闭包
#b.给外部函数设置参数,fun表示的是原函数
def outer(fun):
 def inner():
     # d.给原函数增加功能
     print("hello")

     #c.调用原函数
     fun()
 return inner

#e.使用闭包
f = outer(test)   #f = inner
f()   #inner()
# 运行结果:
# hello
# 拼搏到无能为力,坚持到感动自己

#注意:增加的功能可以写在原函数调用的前面或者后面
#注意:outer函数就被称为装饰器

2.有参装饰器:

# 原函数
def getAge(age):
 print(age)

# 装饰器
def wrapper(fun):
 #注意:当原函数有参数,装饰器的作用是为了操作原函数中的参数,给inner设置参数
 def inner(num):
     #增加新功能:过滤负数
     if num < 0:
         num = 0

     #调用原函数
     fun(num)  #age = num
 return  inner

f = wrapper(getAge)
f(10)   #num = 10
f(-5)   #num = 0

3.装饰器简写:

#简化demo2中的操作:@装饰器的名称  应用到原函数中

#需求:在不修改原函数的基础上,进行数据的过滤:当用户输入age为负数的时候,则置为0
def wrapper(fun):
 #注意:当原函数有参数,装饰器的作用是为了操作原函数中的参数,给inner设置参数
 def inner(num):
     #增加新功能:过滤负数
     if num < 0:
         num = 0

     #调用原函数
     fun(num)  #age = num
 return  inner

#将wrapper装饰器应用在了getAge函数上,
@wrapper
def getAge(age):
 print(age)

getAge(10)
getAge(-
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值