博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 装饰器、生成器、迭代器
阅读量:4918 次
发布时间:2019-06-11

本文共 1809 字,大约阅读时间需要 6 分钟。

装饰器

作用:为其他函数增加功能

装饰器必须要明白以下几点:

1.作用域

2.高阶函数

3.闭包

 

from functools import reduceimport timedef outside(func):    def inside(*args):        start = time.time()        func(*args)        end = time.time()        result = end - start        print(result)    return inside@outside #同于 add = outside(add)def add(*args):    num = reduce(lambda a,b : a+b, args)    time.sleep(0.2)    print(num)@outsidedef mul(*args):    num = reduce(lambda a,b : a*b, args)    time.sleep(0.4)    print(num)if __name__ == "__main__":    add(*range(1,101))    mul(*range(1,6,2))

 

生成器

什么是生成器:

 

生成器本身是没值的,只有你调用了,才会给你返回值。

列表就好比是,厨师把所有的菜全部端上桌子,你想吃那个你点那个,不过有占地方

生成器就好比是,厨师还没做,当你点完所有想吃的菜之后,厨师先只给你做一个,只有你把前面的菜吃完了,才能给你继续做下一个。

 

创建生成器:

 

1、(x for x in range(10))

num = (x**2 for x in range(1,11))

2、yeild

def func():    print("first")    yield 1    print("second")    yield 2# 此时的func函数就是一个生成器对象

 

查看生成器的值:

1、next()  等同于 __next__()

num = (x**2 for x in range(1,11))print(next(num))print(next(num))

2、for循环

def func():    print("first")    yield 1    print("second")    yield 2for i in func():    print(i) 为什么使用for 就不用再使用next 了呢?
因为for循环内部有一个next(),所以在for循环中不需在调用next()

 3、send

send方法与,next方法类似。,用于yield的前的变量。

send方法可以为变量传值,前提是必须要有变量。

如果生成器还没进入,但还要使用send 方法,参数必须是None。

def func():    print("first")    parameter = yield 1    print(parameter)    yield 2    yield "third"f = func() # f是生成器对象f.send(None)f.send("second")print(next(f))

 

迭代器

生成器都是迭代器,但迭代器不一定是生成器。

 

什么是可迭代对象(iterable):

能被iter方法调用,例:列表,元祖,字典,集合,字符串

 

什么是迭代器(iterator):

能被iter方法,next方法调用。

 

for循环内部所做的事情:

1.调用可迭代对象的iter方法,返回一个迭代器对象

2.调用迭代器对象的next方法

3.处理StopIteration

 

# 创建迭代器对象number = [1,2,3]print(type(number)) # 
number = iter(number) # 等同 __iter__()print(type(number)) #
# 调用next(number)for i in number: print(i)

 

转载于:https://www.cnblogs.com/py-peng/p/10774601.html

你可能感兴趣的文章
SpringBoot 部署war包
查看>>
Redis 分布式锁 解决集群环境下多次定时任务执行
查看>>
echart-图表位置改变
查看>>
表单验证神器-validate
查看>>
图片上传的问题-偶现base64图片 小黑块问题
查看>>
echart-legend的图例改变
查看>>
表格-固定列 固定行
查看>>
bootstrap radio
查看>>
mobileSelect.js 运用 input 不让吊起小键盘
查看>>
cropper.js图片裁剪——第二弹
查看>>
axios 请求数据 入门级介绍
查看>>
PHP学习笔记
查看>>
kali安装vmtool后依旧无法拖拽文件,复制粘贴,解决办法
查看>>
【编程范式】函数式基础图示
查看>>
【JS语法】作用域与绑定图示
查看>>
未在本地计算机注册vfpoledb
查看>>
sql server 日期
查看>>
置换元素与非置换元素
查看>>
不支持事件冒泡的事件
查看>>
JavaScript中的for..in以及for...of
查看>>