Python迭代器与装饰器

一、列表生成式

在之前的学习中生成一个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教程






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值