生成器、迭代器、闭包、装饰器区别

2020-04-02  本文已影响0人  Samuel_Lee
生成器定义:

generator:生成器本质上就是迭代器

获取生成器:

# 首先我们先看一个简单函数
def func():
    print("约吗?")
    return "叔叔我不约
    
ret = func()
print(ret)
# 约吗?
# 叔叔我不约

# 将函数中的return换成yield就是生成器
def func():
    print("约吗?")
    yield "叔叔我不约"

ret = func()
print(ret)
# <generator object func at 0x0000022CBD94CEB8>

yield 和 return的区别:

def func():
    print("哈哈哈谁都不能阻止我打印...")
    return "SB"
    print("我还想接着打印,给个机会...")
    
ret = func()
print(ret)
# 哈哈哈谁都不能阻止我打印...
# SB

def func():
    print("哈哈哈谁都不能阻止我打印...")
    yield "SB"
    print("你越这么说我越要打印哈哈哈...")
    yield "S2B"
    print("我就是要打印,你喊return来都没用哈哈哈")
    # return "SB"
    # print("爸爸给个机会!!!")

ret = func()
print(ret.__next__())
# 哈哈哈谁都不能阻止我打印...
# SB
print(ret.__next__())
# S2B
# 我就是要打印,你喊return来都没用哈哈哈

send() 和 next()区别:

优点:

由于生成器具有惰性机制,每次想要得到值都必须next()去取一次,所有生成器具有节省内存的优点。

# 鸡蛋
def get_eggs():
    eggs = []
    for i in range(10000):
        eggs.append(i)
    return eggs
    
ret = get_eggs()    # 10000个鸡蛋
    
# 老母鸡
def get_eggs():
    for i in range(10000):
        yield i
ret = get_eggs()    # 老母鸡
print(ret.__next__())   # 老母鸡下1个蛋
print(ret.__next__())   # 老母鸡下2个蛋
迭代器定义:
闭包定义:

函数里面再定义一个函数,里面的函数用到外面函数的变量,称这个这个函数以及⽤到的变量称为闭包

优点:
from urllib.request import urlopen
def but():
    content = urlopen("http://www.xiaohua100.cn/index.html").read()
    def get_content():
        return content
    return get_content
fn = but() # 这个时候就开始加载校花100的内容
# 后⾯需要⽤到这⾥⾯的内容就不需要在执⾏⾮常耗时的⽹络连接操作了
装饰器定义:
优点:
上一篇 下一篇

猜你喜欢

热点阅读