课程名称
全能软件测试工程师
课程章节
闭包和装饰器
课程讲师
大周
课程内容
Python闭包
-
什么是闭包?
在一个函数,如func1中的内部定义了另一个函数func2,并且函数func1的返回值为函数func2的引用,这种情况称之为闭包。简单来说,外部函数返回内部函数的引用就叫做闭包
def func1():
print("函数1运行")
def func2():
print("函数2运行")
func2()
return func2
f2 = func1()
print(f2)
f2()
装饰器
- 什么是装饰器?
@函数名
,叫装饰器,又称为语法糖
import datetime
def runtime(func):
def warpper():
print(datetime.datetime.now())
return func()
return warpper
# 使用装饰器 ,直接将函数传至装饰器当中进行运行
@runtime
def my_func1():
print("函数1运行")
my_func1()
@runtime
def my_func2():
print("函数2运行")
my_func2()
装饰器使用案例:龟兔赛跑
#龟兔百米赛跑
import time
import random
# 定义赛道长度
TRACK_LENGTH = 100
# 装饰器runtime计算赛跑时间
def runtime(func):
def cal_time():
start_time = time.time()
func()
end_time = time.time()
consume_time = end_time - start_time
print(func.__name__,f"跑了{consume_time}秒")
return cal_time
# 乌龟的函数
@runtime
def tot():
for i in range(1,TRACK_LENGTH+1):
print(f"乌龟跑了{i}米")
time.sleep(1)
# 兔子的函数
@runtime
def rabbit():
for i in range(1,TRACK_LENGTH+1):
if i % 9 == 0:
time.sleep(random.randint(1,10))
print (f"兔子跑了{i}米")
yield的使用
- yield关键字:生成器可以使用for循环来迭代
- retrun和yield的区别,必须同for循环通过迭代才能拿到yield的返回值,才能进行使用。yield返回的时候生成器的一个对象,return返回的是一个具体的值
- 我们为什么需要生成器?
- 原因:因为当我们的列表大到几百万条数据时,我们只要取几百条数据的时候,如果我们把几百万条数据全取出来就需要耗费极大的内存,我们不需要把几百万条数据挨个搞出来,这个时候生成器就来了
- 解决问题:生成器是python种的一个机制,边计算边运行。
- 原理:我们把数据按照相关算法进行一个输出记录,一边计算一边运行,取到我们需要的数据即可,便不再需要把几百万数据挨个取出。
课程收获
通过老师的讲解和自己的实践,对于闭包、装饰器和yield的用法有了初步的了解,下一步将继续跟着老师的节奏学习Python。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦