Python 测开27期 - WL - 学习笔记 - python 闭包函数

python 闭包函数

函数引用

  • 函数可以被引用
  • 函数可以被赋值给一个变量
    image

闭包函数

  • 闭包的内部函数中,对外部作用域的变量进行引用
  • 闭包无法修改外部函数的局部变量
  • 闭包可以保存当前的运行环境
    image
def grade(age):
    def close(name,sex):
        print(f"大话西游开服啦,姓名是{name},玩家性别是{sex},玩家年龄是{age}")
    return close
game = grade(2017)
game("逆天魔",'男')

python 装饰器

  • 第一步,定义两个函数,一个内函数,一个外函数
  • 第二步,在内函数中添加装饰器的逻辑
  • 第三步,把内函数的函数对象return出去
  • 第四步,使用装饰器
  • 第五步,在装饰器执行过程中,会自动传入一个参数,参数就是被装饰函数的函数对象
  • 第六步,添加被装饰函数的执行步骤
    image
def timer(func):
    def inner():
        print('计时开始')
        func()
        print('即使结束')

    return inner
@timer
def nana():
    print('测试打印')
nana()
'''结果是:
计时开始
测试打印
即使结束
'''
  • 如果被装饰的函数由参数,就需要在内函数增加形参,在函数调用的时候也需要添加参数信息
  • 如果不确定被装饰函数的参数数量,可以把两个地方的参数全部换成不定长参数,*args,**kwargs

装饰器练习示例

  • 实现一个计时器的装饰器,计算函数执行时间
    image
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
'''