写点什么

软件测试 / 测试开发丨 Python 闭包函数和计时器学习笔记

作者:测试人
  • 2023-07-05
    北京
  • 本文字数:1566 字

    阅读完需:约 5 分钟

免费领取:测试资料+性能测试+接口测试+自动化测试+测试开发+测试用例+简历模板+测试文档

本文为霍格沃兹测试开发学社学员学习笔记分享

原文链接:https://ceshiren.com/t/topic/25087

闭包函数

  • 闭包的内部函数中,对外部作用域的变量进行引用

  • 闭包无法修改外部函数的局部变量

  • 闭包可以保存当前的运行环境

# 普通方法实现def output_student(name, gender, grade=1):    print(F"新学期开学啦,学生{name}是{gender},他是{grade}年级学生")

output_student('李白', '男生')output_student('赵云', '男生')output_student('孙尚香', '女生')
复制代码


# 闭包函数def student_grade(grade):    def output_student(name, gender):        print(F"新学期开学啦,学生{name}是{gender},他是{grade}年级学生")    return output_student

student_info = student_grade(3)student_info('李白', '男生')student_info('赵云', '男生')student_info('孙尚香', '女生')
复制代码

需求:在函数调用的时候打印函数开始和函数结束

def aaa():    print('good good study, happy happy everyday')

def bbb(): print('everything is ok')

# 把中间的执行函数使用参数替代def function_tips(func): print("函数开始执行") # 不写死函数,使用外部调用的方式 func() print("函数结束执行")

# 传入一个函数对象function_tips(bbb)
复制代码

代码运行步骤:


func 参数等于上方的 bbb 函数,下方调用 func 就等于调用 bbb 函数,然后把 bbb 的内容带入 func


最后执行代码实现


使用装饰器实现

# 使用装饰器实现# 闭包定义,1、定义两个函数,一个内函数,一个外函数,timer是外函数# 5、在装饰器执行的过程中传入一个参数,这个参数就是被装饰函数的对象def timer(func):    # inner作用:执行装饰器的逻辑;inner是内函数    def inner():        # 2、在内函数里面添加装饰器的逻辑        print("代码开始运行")        func()  # 6、添加被装饰函数的执行步骤        print("代码结束运行")    # 3、把内函数返回出去,之后可以被调用    return inner

# 4、装饰器的使用:@+装饰器名称@timerdef aaa(): print('ccccc')

aaa()
---------->代码开始运行ccccc代码结束运行
复制代码

装饰器的练习

题目:实现一个计时器的装饰器,计算函数的执行时间

import datetime

def timer(func): def inner(): # 获取当前时间 start_time = datetime.datetime.now() func() # 获取结束时间 end_time = datetime.datetime.now() print(f"函数执行时间{end_time - start_time}")
return inner

@timerdef calc(): print("aaaaaaa")

calc()
------------------------------->aaaaaaa函数执行时间0:00:00
复制代码

被装饰函数存在参数怎么解决

# 装饰器的练习# 题目:实现一个计时器的装饰器,计算函数的执行时间import datetime

def timer(func): """ 1、如果装饰器内有参数,需要写在内置函数内,在调用的时候也要带上 2、如果写死一个参数,但无法确定被装饰器的参数数量,这种写法会报错 3、解决方法:把两个地方的参数全部换成不定长参数*args, **kwargs :param func: :return: """ def inner(*args, **kwargs): # 获取当前时间 start_time = datetime.datetime.now() func(*args, **kwargs) # 获取结束时间 end_time = datetime.datetime.now() print(f"函数执行时间{end_time - start_time}")
return inner

@timerdef calc(name, age, gender): print("aaaaaaa") print(name) print(age) print(gender)

calc('lili', 3, "女")
-------------------------------->aaaaaaalili3函数执行时间0:00:00
复制代码


发布于: 刚刚阅读数: 3
用户头像

测试人

关注

专注于软件测试开发 2022-08-29 加入

霍格沃兹测试开发学社,测试人社区:https://ceshiren.com/t/topic/22284

评论

发布
暂无评论
软件测试/测试开发丨Python闭包函数和计时器学习笔记_Python_测试人_InfoQ写作社区