您的位置:首页 > 编程语言 > Python开发

Python迭代器与装饰器

2017-08-02 09:47 78 查看
一、列表生成式

在之前的学习中生成一个list,采用下列方式

list(range(1,10))
但是,现在有这样一个需求,生成一个list[1,4,9,16,25,36,49],如果采用for循环的方式会显得比较繁琐,这时候就用到列表生成式,一句话搞定。

[x*x for x in range(1,11)]


二、生成器

在Python中,一边循环一边计算的机制称为生成器

定义生成器的方式:

(1)列表生成式的[]改为()

使用for循环进行调用即可

(2)定义yield关键字

如果一个函数定义中包含yield关键字,则这个函数为一个生成器

注意:yield的原理是,在每次进行迭代调用next()时执行,遇到yield语句返回,下次执行时从上次返回的yield语句处继续执行。

三、迭代器

(一)可以直接使用for循环的数据类型有以下几种:

1.集合数据类型:如list、tuple、dict、set、str等

2.生成器:包括生成器和带yield的函数

我们将这些可以直接使用for循环的对象统称为可迭代对象,使用isinstance()进行判断

而可以被next()函数调用并不断返回下一个值的对象则称为迭代器,使用isinstance()进行判断

可迭代对象转化为生成器使用iter()函数

注意:Python的for循环本质上就是通过不断调用next()函数实现的

四、装饰器

本质上来说:装饰器是函数,去为其他函数添加附加功能,在不改变原函数的情况下

(一)有以下重要原则:

1.不能修改被装饰函数的源代码

2.不能修改被装饰函数的调用方式

(二)如何实现一个装饰器

1.理解函数即变量

2.高阶函数

a,把一个函数名当做实参传给另一个函数(在不锈钢被装饰函数源代码的情况下为其添加功能)

b.返回值中包含函数名(不修改函数的调用方式)

3.嵌套函数

示例

import time
def timer(func):
def deco():
start_time = time.time()
func()
stop_time = time.time()
print("the func time")
return deco
def test1():
print("in the test1")
@timer #test1 = timer(test1)
test1()
本文章参考了廖雪峰老师的Python教程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 迭代器 装饰器