函数式编程
函数作为返回值
逻辑连续,当内部函数被调用时,不脱离当前的逻辑
闭包
三要素
- 必须有一个内嵌函数
- 内嵌函数必须引用外部函数中变量
- 外部函数返回值必须是内嵌函数
# 定义:
def 外部函数名(参数):
外部变量
def 内部函数名(参数):
使用外部变量
return 内部函数名
# 调用:
变量 = 外部函数名(参数)
变量(参数)
- 定义:是由函数及其相关的引用环境组合而成的实体
- 优点:内部函数可以使用外部变量
- 缺点:外部变量一直存在于内存中,不会在调用结束后释放,占用内存
- 作用:实现python装饰器
# 演示
def give_gife_money(money):
print("获得", money, "元压岁钱")
def child_buy(commodity, price):
nonlocal money
money -= price
print("购买了", commodity, "花了", price, "元,还剩下", money)
return child_buy
action = give_gife_money(500)
action("变形金刚", 200)
action("芭比娃娃", 300)
函数装饰器 decorator
在不改变原函数的调用以及内部代码情况下,为其添加新功能的函数
- 使用
@函数装饰器名称
修饰原函数,等同于创建与原函数名称相同的变量,关联内嵌函数;故调用原函数时执行内嵌函数 - 一个函数可以被多个装饰器修饰,执行顺序为从近到远
# 语法
def 函数装饰器名称(func):
def wrapper(*args, **kwargs):
需要添加的新功能
return func(*args, **kwargs)
return wrapper
@ 函数装饰器名称
def 原函数名称(参数):
函数体
原函数(参数)
- 原函数名称 = 函数装饰器名称(原函数名称)
def func01():
print("旧功能")
def new_func(func):
def wrapper():
print("新功能")
func() # 执行旧功能
return wrapper
# 新功能覆盖了旧功能
# func01 = new_func
# 调用一次外部函数(装饰器本质)
func01 = new_func(func01)
# 调用多次内部函数
func01()
func01()
- 修饰原函数
def func_new(func):
def wrapper(*args):# 2 合
print("新功能")
res = func(*args) # 调用旧功能 拆
return res
return wrapper
# func01 = func_new(func01)
@func_new
def func01(p1):# 3
print("旧功能1")
return 100
@func_new
def func02(p1,p2):# 3
print("旧功能2")
value = func01(10) # 调用内函数
value = func02(10,20) # 调用内函数
print(value)
最后一次更新于2023-02-21 14:56
0 条评论