python 装饰器、生成器、迭代器

装饰器

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

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

1.作用域

2.高阶函数

3.闭包

from functools import reduce
import time

def 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)

@outside
def 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 2

for 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)) # <class ‘list‘>

number = iter(number) # 等同 __iter__()

print(type(number)) # <class ‘list_iterator‘>

# 调用
next(number)
for i in number:
    print(i)

原文地址:https://www.cnblogs.com/py-peng/p/10774601.html

时间: 2024-10-12 16:27:39

python 装饰器、生成器、迭代器的相关文章

Python装饰器、迭代器&amp;生成器、re正则表达式、字符串格式化

Python装饰器.迭代器&生成器.re正则表达式.字符串格式化 本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 先定义一个基本的装饰器: ########## 基本装饰器 ########

Python装饰器、迭代器、生成器、re正则表达式、字符串格式

本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 先定义一个基本的装饰器: ########## 基本装饰器 ########## def orter(func): #定义装饰器 def inner

《Python运维开发之路》 装饰器&amp;生成器&amp;迭代器(五)

一.装饰器 装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator),装饰器的功能非常强大.装饰器一般接受一个函数对象作为参数,以对其进行增强      说白了:就相当于C++中的构造函数,与析构函数 装饰器本身是一个函数,用于装饰其他函数 装饰器是一个闭包函数是嵌套函数,通过外层函数提供嵌套函数的环境 装饰器在权限控制,增加额外功能如日志,发送邮件用的比较多 1,原函数不带参数的装饰器 假设:我定义了一个函数lyshar

python装饰器、迭代器、生成器、闭包等等

闭包是什么 内层函数调用外层函数. 返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域 def outer(): name = '好好听课' def inner(): print("你要干嘛",name) return inner fun = outer() fun() 闭包+高阶函数=装饰器 为什么要用装饰器? 软件开发需要遵守以下原则: 开闭原则: 1.对已实现的功能模块不应该修改 2.对现有的功能的扩展开

Python之装饰器、迭代器和生成器

在学习python的时候,三大“名器”对没有其他语言编程经验的人来说,应该算是一个小难点,本次博客就博主自己对装饰器.迭代器和生成器理解进行解释. 为什么要使用装饰器 什么是装饰器?“装饰”从字面意思来谁就是对特定的建筑物内按照一定的思路和风格进行美化的一种行为,所谓“器”就是工具,对于python来说装饰器就是能够在不修改原始的代码情况下给其添加新的功能,比如一款软件上线之后,我们需要在不修改源代码和不修改被调用的方式的情况下还能为期添加新的功能,在python种就可以用装饰器来实现,同样在写

Python学习之三大名器-装饰器、迭代器、生成器

Python学习之三大名器-装饰器.迭代器.生成器 一.装饰器     装饰,顾名思义就是在原来的基础上进行美化及完善,器这里指函数,所以说装饰器就是装饰函数,也就是在不改变原来函数的代码及调用方式的前提下对原函数进行功能上的完善.其核心原理其实是利用闭包.     格式 @关键字+装饰函数          被装饰函数()      注意:@行必须顶头写而且是在被装饰函数的正上方     按照形式可以分为:无参装饰器和有参装饰器,有参装饰器即给装饰器加上参数     以下示例是一个无参装饰器,

Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化

本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 先定义一个基本的装饰器: ########## 基本装饰器 ########## def orter(func):    #定义装饰器     de

Python概念之装饰器、迭代器、生成器

装饰器.迭代器.生成器均属于函数知识范畴 1.装饰器 理解装饰器,首先要了解闭包函数. 闭包函数:1.定义在函数内部的函数: 2.该函数的函数体代码包含对外部作用域(而不是全局作用域)名字的引用: 3.通常将闭包函数用return返回,然后可以任意调用. eg:以下代码中inner()即闭包函数 def outer(): x=1 def inner(): print(x) return innerf=outer() 装饰器:即是一种闭包函数的应用. 什么是装饰器?:装饰它人的器具,本身可以是任意

Python 函数对象、生成器 、装饰器、迭代器、闭包函数

一.函数对象 正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松平常了.但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性.那到底什么是第一类对象(First-Class Object)呢? 在 Python 中万物皆为对象,函数作为第一类对象有如下特性: #函数身为一个对象,拥有对象模型的三个通用属性:id(内存地址

4)装饰器、迭代器、生成器以及内置函数

 装饰器.迭代器.生成器以及内置函数 装饰器: 原函数前后增加功能,切不改变函数的原本使用方式 import timedef wrapper(f):    def inner():        start = time.time()        f()        end = time.time()        print('执行效率为%s'%(end-start))    return inner @wrapperdef func():    print('this is func')