python之路——第二块(装饰器、生成器、迭代器)

装饰器

def deco(count):
    def func(num):
        if num < 10:
            count(num)
        else:
            exit()
    return func

@deco
def count(num):
    a = 0
    for i in range(num):
        a += i
    print(a)

count(11)

  

注:deco(count)和下面的count(num)中的count只是一个形参,count可以用任何变量名替换,但是num是一定要有,因此传入的实参是被装饰函数,被装饰函数有num形参。

总结:1、装饰器没有修改被装饰函数的源代码和调用方式

   2、用到了高阶函数,把被装饰函数函数名当做实数传入装饰器第一级函数;装饰器第二级函数包含被装饰函数以及要加的新功能,然后将第二级函数的内存地址返回给第一级函数。这样就能达到装饰的效果。

   3、用到了嵌套函数,第一级函数嵌套第二级函数。

生成器:一边循环一边计算的机制,节省内存空间;只有在调用这个生成器时,才会生成想应的数据。

  首先看一个列表生产式

a = [i*2 for i in range(10)]        #列表生产式
print(a)          #直接打印a列表的所有结果

  但是如果range()里面是10000的时候,就会占用电脑大量内存,我们需要的仅仅是其中一个数据。此时可以用生成器

b = (i*2 for i in range(10))   #生成器
print(b)      #打印的是内存地址

  此时,b就是生成器,打印b显示的是内存地址,可用_next_方法

print(b.__next__())   #0
print(b.__next__())   #2
print(b.__next__())   #4

除了这种列表生产器,还可以把函数改装生成器,比如下面一个斐波那契函数

def fei(max):              #斐波那契额函数
    a,b,n = 0,1,0
    while n < max:
        print(b)
        a,b = b,a+b
        n += 1

  调用这个函数,输出的是整个斐波那契列表,但是可以把print(b)改成yield b的方法,把函数变成生成器。

def feib(max):
    a,b,n = 0,1,0
    while n < max:
        yield b            #将print 改为 yield 变成斐波那契生成器
        a,b = b,a+b
        n += 1
f = feib(10)
print(f.__next__())   #1
print(f.__next__())   #1
print(f.__next__())   #2

  可以用for的方法,来输出生产器的所有结果

for i in fei(10):
    print(i)

  输出的结果和

f = fei(10)

  的结果一样

可迭代对象:可以直接作用于for循环的对象统称为可迭代对象:Iterable

迭代器:可以被_next_()函数调用并不断返回下一个值的对象称为迭代器:Iterator

1、可以使用isinstance()判断一个对象是否是Iterable对象

2、集合数据类型,如listtupledictsetstr等可以使用for循环,但是不具有_next_()方法,使用只属于可迭代对象,不属于迭代器

所以,生成器属于迭代器,也属于可迭代对象,但是迭代器不一定是生成器。

时间: 2024-10-07 05:31:36

python之路——第二块(装饰器、生成器、迭代器)的相关文章

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

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

Python初探第二篇-装饰器和迭代器,生成器

一,装饰器 1,概念 装饰器就是给已有的模块添加新的功能,如登录验证功能,运行时间功能等.本身可以是任意可调用对象,被装饰者也可以是任意可调用对象. 强调装饰器的原则:1 不修改被装饰对象的源代码 2 不修改被装饰对象的调用方式 装饰器的目标:在遵循1和2的前提下,为被装饰对象添加上新功能 2,理论基础 要想实现装饰器的功能,我们需要三个理论基础:函数闭包+函数嵌套+高阶函数.我们通过为如下模块加入统计运行时间的装饰器来讲解如何使用 import time def test_func(): fo

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

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

python之路4:各种器

装饰器 生成器 迭代器 一.装饰器 装饰器是函数,官方叫语法糖,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或类,使用装饰器可以在函数执行前和执行后添加相应操作. 语法: def wrapper(func): def result(): print('before') func() print('after') return result @wrapper def foo(): print('foo') 实例: #!/usr/bin/env python # -*- coding:utf-

Python学习之路-装饰器&生成器&正则表达式

装饰器 通俗的讲,装饰器就是在不改变源代码基础上,给源代码增加新功能. 不改变函数的源代码.调用方式.返回值等,给函数增加新功能. 经典案例:登录装饰器, def login_decorator(func):     def inner():         if USER_TEMP["status"] == False:             print("\033[31;1m用户未登录,请先登录\033[0m")             login_atm()

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

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

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

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

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

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

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

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