python 闭包函数
函数引用
- 函数可以被引用
- 函数可以被赋值给一个变量
闭包函数
- 闭包的内部函数中,对外部作用域的变量进行引用
- 闭包无法修改外部函数的局部变量
- 闭包可以保存当前的运行环境
def grade(age):
def close(name,sex):
print(f"大话西游开服啦,姓名是{name},玩家性别是{sex},玩家年龄是{age}")
return close
game = grade(2017)
game("逆天魔",'男')
python 装饰器
- 第一步,定义两个函数,一个内函数,一个外函数
- 第二步,在内函数中添加装饰器的逻辑
- 第三步,把内函数的函数对象return出去
- 第四步,使用装饰器
- 第五步,在装饰器执行过程中,会自动传入一个参数,参数就是被装饰函数的函数对象
- 第六步,添加被装饰函数的执行步骤
def timer(func):
def inner():
print('计时开始')
func()
print('即使结束')
return inner
@timer
def nana():
print('测试打印')
nana()
'''结果是:
计时开始
测试打印
即使结束
'''
- 如果被装饰的函数由参数,就需要在内函数增加形参,在函数调用的时候也需要添加参数信息
- 如果不确定被装饰函数的参数数量,可以把两个地方的参数全部换成不定长参数,*args,**kwargs
装饰器练习示例
- 实现一个计时器的装饰器,计算函数执行时间
import datetime
def timer(func):
def inner(*args, **kwargs):
start = datetime.datetime.now()
func(*args, **kwargs)
end = datetime.datetime.now()
print(f'函数执行的时间是{end-start}')
return inner
@timer
def game(ags, kwgs):
print(f'这是梦幻西游开服了,{ags}{kwgs}')
game('真的','假的')
'''结果是
这是梦幻西游开服了,真的假的
函数执行的时间是0:00:00
'''