亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

【金秋打卡】第5天+Python閉包、裝飾器和yield

標簽:
Python

课程名称

全能软件测试工程师

课程章节

闭包和装饰器

课程讲师

大周

课程内容

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返回的是一个具体的值
  • 我们为什么需要生成器?
    1. 原因:因为当我们的列表大到几百万条数据时,我们只要取几百条数据的时候,如果我们把几百万条数据全取出来就需要耗费极大的内存,我们不需要把几百万条数据挨个搞出来,这个时候生成器就来了
    2. 解决问题:生成器是python种的一个机制,边计算边运行。
    3. 原理:我们把数据按照相关算法进行一个输出记录,一边计算一边运行,取到我们需要的数据即可,便不再需要把几百万数据挨个取出。

课程收获

通过老师的讲解和自己的实践,对于闭包、装饰器和yield的用法有了初步的了解,下一步将继续跟着老师的节奏学习Python。

图片描述

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消