iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python-装饰器&生成器&迭代器&推
  • 465
分享到

python-装饰器&生成器&迭代器&推

生成器迭代python 2023-01-31 00:01:06 465人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

 一:普通装饰器 概念:在不改变原函数内部代码的基础上,在函数执行之前和之后自动执行某个功能,为已存在的对象添加某个功能 普通装饰器编写的格式 def 外层函数(参数) def 内层函数(*args,**kwargs)

 一:普通装饰器

  • 概念:在不改变原函数内部代码的基础上,在函数执行之前和之后自动执行某个功能,为已存在的对象添加某个功能
  1. 普通装饰器编写的格式
    def 外层函数(参数)
        def 内层函数(*args,**kwargs) 
            #函数执行之前
            data= 参数(*args,**kwags)
            #函数执行之后
            return data
        return 内层函数
  2. 用法示例:  
    def func(arg):
        def inner():
            v = arg()
             return v
          return inner
    
    # 第一步:执行func函数并将下面的函数当做参数进行传递,  相当于:func(index)
    # 第二步: 将func返回的值重新赋值给下面的函数名   index = func(index)
    
     @func   #@装饰器的语法
      def index():
            print(123)
            return 666
      print(index)
  3. 应用示例
    #示例:计算函数执行时间
    import time
    def base(func):
        def inner():
            start_time = time.time()  --->#函数执行之前
            v= func()
            end_tme = time.time()  ---->#函数执行之后
            print(end_time-start_time)
            return v
        return inner
    
    @base
    def func1():
        time.sleep(2)  # 函数执行延缓2秒
        print(123)
        
    @base
    def func2():
        time.sleep(1)
        print(456)
  •  关于返回值
    def base(func):
        def inner(*args,**kwargs):
            data = func(*args,**kwargs)
            return data
        return inner 
                           
    @x1
    def index():
        print(123)
        return 666
    v1 =index()
    print(v1)
    #func函数带括号,执行index函数,先打印'123',先将666返回给data,data再返回给v1   
  •  关于前后
    def base(func):
        def inner(*args,**kwargs)
            print('函数调用之前')
            data = func(*args,**kwargs)   #执行原函数并获取返回值
            print('调用原函数之后')
            return data
        return inner
    @base
    def index()
        print(123)
    index()

 二:带参数的装饰器

  • 基本格式
    def base(counter):
        def wrapper(func):
            def inner(*args,**kwargs):
                data = func(*args,**kwargs) # 执行原函数并获取返回值
                return data
            return inner 
        return wrapper 
    @base(9)   
    def index():
        pass
    
     #先执行base函数,然后将返回值wrapper返回,变成不带参数的装饰器 
  •  用法示例
    #写一个带参数的函,实现:参数是多少,被装饰的函数就要执行多少次,返回最后一次执行的结果
    
    def base(counter):
        def wrapper(func):
            def inner(*args,**kwargs):
                for i in range(counter):
                    data = func(*args,**kwargs) # 执行原函数并获取返回值
                return data
            return inner
        return wrapper
    
    @base(5)
    def index():
        return 好难啊
    v = index()
    print(v) 

 三:生成器 (函数的变异)

  • 概念:函数中如果存在yield,那么该函数就是一个生成器函数,调用生成器函数,会返回一个生成器,生成器只有被for循环时,生成器内部代码才会执行,每次循环都会获取yield返回的值
  •  生成器函数 : 内部是否包含yield
    def func():
        print('F1')
        yield 1
        print('F2')
        yield 2
        print('F3')
    #函数内部代码不会执行,返回一个生成器对象
    v1 = func()
    #生成器可以被for 循环,一旦开始循环函数内部代码就开始执行
    for item in v1:
        print(item)
    #  F1  1  F2  2  F3  
  •  特殊的迭代对象
    def func():
        yield 1
    
    v = func()
    result = v.__iter__()
    print(result) 

 四:迭代器

  • 概念:对某种对象(str/lsit/tuple/dict/set类创建的对象)中的元素进行逐一获取,表象:具有__nest__方法且每次调用都获取可迭代对象中的元素
  •  列表转换成迭代器
    • v1 = iter([1,2,3,4])

    • v2 = [1,2,3,4].__iter__()

  •  迭代器想要获取每个元素 : 反复调用val = v1.__next__()
    v1 = "alex"
    v2 = iter(v1)
    while True:
         try:
            val = v2.__next__()
            print(val)
         except Exception as e:
            break

     

  •  直到报错:stoplteration错误,表示迭代已经完毕
  •  如何判断一个对象是否是迭代器 : 内部是否有__next__方法
  •  for 循环
    v1 = [11,22,33,44]
    
    # 1.内部会将v1转换成迭代器
    # 2.内部反复执行 迭代器.__next__()
    # 3.取完不报错
    for item in v1:
        print(item) 
  •  可迭代对象
    • 内部具有_iter__方法且返回一个迭代器

    • 可以被for 循环

 五;推导式

  • 列表推导式(也叫列表生成式)

    • 基本格式

      v1 = [i for i in 可迭代对象]
      v2 = [i for i in 可迭代对象 if 条件]   #条件为true才进行append
#示例
v1 = [99 if i>5 else 66  for i in range(10)]  

v2 = [lambda : 100 for i in range(10)]
result = v5[9]()  # 100

v3 = [lambda :i for i in range(10)]
result = v7[5]()  # 9

v4 = [lambda x:x*i for i in range(10)] 
# 1.请问 v4 是什么?
函数地址 
# 2.请问 v4[0](2) 的结果是什么?
18

def num():
    return [lambda x:i*x for i in range(4)]
# num() -> [函数,函数,函数,函数]
print([ m(2) for m in num() ])   # [6,6,6,6]
  
#####筛选#####
v = [i for i in range(10) if i > 5]
  •  集合推导式
    v1 = { i for i in 'alex' } 
  •  字典推导式
    v1 = { 'k'+str(i):i for i in range(10) }

     

  •  生成器推导器
    def func():
        for i in range(10):
        yield i
    v2 = func()
    
    #或者
    v2 = (i for i in range(10))   # 生成器推导式(不是元组推导式),创建了一个生成器,内部循环为执行。
    for item in v2:
        print(item)

     

  

 

--结束END--

本文标题: python-装饰器&生成器&迭代器&推

本文链接: https://www.lsjlt.com/news/181948.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python-装饰器&生成器&迭代器&推
     一:普通装饰器 概念:在不改变原函数内部代码的基础上,在函数执行之前和之后自动执行某个功能,为已存在的对象添加某个功能 普通装饰器编写的格式 def 外层函数(参数) def 内层函数(*args,**kwargs) ...
    99+
    2023-01-31
    生成器 迭代 python
  • 生成器,迭代器,装饰器
    生成器 (generator) 概念 在Python中, 一边循环一边计算的机制, 称为生成器: generator 创建生成器: G = ( x*2 for x in range(5)) 可以通过 next(生成器) 函数获得生成...
    99+
    2023-01-31
    生成器 迭代
  • python3 迭代器、生成器、装饰器、
    本节内容迭代器&生成器装饰器Json & pickle 数据序列化软件目录结构规范作业:ATM项目开发 1.列表生成式迭代器&生成器列表生成式孩子我现在有个需求看列表[0, 1, 2, 3, 4, 5, 6, 7, ...
    99+
    2023-01-31
    生成器 迭代
  • Python3 迭代器,生成器,装饰器
    1.迭代器 迭代器有两个基本方法,iter()和next(),next()完成后会引发StopIteration异常 a='abcdef' b=iter(a) #创建迭代器对象 print(type(b)) while True: t...
    99+
    2023-01-30
    生成器 迭代
  • python三大器之迭代器、生成器、装饰器
    目录迭代器生成器装饰器(非常实用!)迭代器 聊迭代器前我们要先清楚迭代的概念:通常来讲从一个对象中依次取出数据,这个过程叫做遍历,这个手段称为迭代(重复执行某一段代码块,并将每一次迭...
    99+
    2024-04-02
  • python中的生成器、迭代器、装饰器详解
    一、装饰器 由于一个函数能实现一种功能,现在想要在不改变其代码的情况下,让这个函数进化一下,即能保持原来的功能,还能有新的"技能",怎么办? 现已经存在一个自定义...
    99+
    2024-04-02
  • python中的迭代器,生成器与装饰器详解
    目录迭代器生成器装饰器总结迭代器 每一个可迭代类内部都要实现__iter__()方法,返回一个迭代类对象,迭代类对象则定义了这个可迭代类如何迭代。 for循环调用list本质上是是调...
    99+
    2024-04-02
  • python的迭代器,生成器和装饰器你了解吗
    python 迭代器与生成器,装饰器 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。 迭代器有两个基本的方法:iter() 和 next()。 字符串,列表或元组...
    99+
    2024-04-02
  • Python学习之三大名器-装饰器、迭代器、生成器
    一、装饰器装饰,顾名思义就是在原来的基础上进行美化及完善,器这里指函数,所以说装饰器就是装饰函数,也就是在不改变原来函数的代码及调用方式的前提下对原函数进行功能上的完善。其核心原理其实是利用闭包。格式 @关键字+装饰函数被装饰函数()注意:...
    99+
    2023-06-02
  • python中的迭代器,生成器与装饰器怎么用
    这篇文章主要讲解了“python中的迭代器,生成器与装饰器怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python中的迭代器,生成器与装饰器怎么用”吧!迭代器每一个可迭代类内部都要实...
    99+
    2023-06-29
  • python中的生成器、迭代器、装饰器怎么使用
    本篇内容介绍了“python中的生成器、迭代器、装饰器怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、装饰器由于一个函数能实现一种...
    99+
    2023-07-02
  • 带参装饰器,迭代器,生成器,枚举对象
    一,复习 ''' 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.验证执行 开放封闭原则: 功能可以拓展,但源代码与调用方式都不可以改变 装饰器:装饰器...
    99+
    2023-01-31
    生成器 对象 迭代
  • python 生成器&迭代器
      一、生成器 1、列表生成器:列表生成式就像是一个厨师,他只会做这n(n为任意整数)道菜,想吃甚麽做甚麽,不吃不做,不浪费空间;而列表表达式就相当于已经做好的n盘菜,占用空间。2、生成器的创建方法: s = (x*2 for x in...
    99+
    2023-01-30
    生成器 迭代 python
  • Python迭代器与生成器
    生成器仅仅拥有生成某种东西的能力,如果不用__next__方法是获取不到值得。创建一个生成器函数>>> def scq(): ...    print("11") # 当函数代码块中遇到yield关键字的时候,这个函数就是...
    99+
    2023-01-31
    生成器 迭代 Python
  • python迭代器和生成器
    1.经典迭代器 import re RE_WORD = re.compile('\w+') class Sentence: def __init__(self, text): self.text = te...
    99+
    2023-01-30
    生成器 迭代 python
  • python迭代器,生成器详解
    目录迭代器 生成器 总结迭代器 聊迭代器前我们要先清楚迭代的概念:通常来讲从一个对象中依次取出数据,这个过程叫做遍历,这个手段称为迭代(重复执行某一段代码块,并将每一次迭代得到的结...
    99+
    2024-04-02
  • Python学习 :迭代器&生成器
    列表生成式 列表生成式的操作顺序: 1、先依次来读取元素 for x 2、对元素进行操作 x*x 3、赋予变量 Eg.列表生成式方式一 a = [x*x for x in range(10)] print(a) >>&g...
    99+
    2023-01-30
    生成器 迭代 Python
  • c++容器加迭代器和python装饰器的
    c++利用对象实现简单数据的测试: class TestDataEmptyArray { public: static vector<int> get_array() { std::vector<...
    99+
    2023-01-30
    容器 迭代 python
  • Python生成器与迭代器详情
    目录1、生成器 2、迭代器与可迭代的生成器1、生成器 现在可以通过生成器来直接创建一个列表,但是由于内存的限制,列表的容量肯定是有限的,如果我们需要一个包含几百个元素的列表,但是每...
    99+
    2024-04-02
  • 迭代器与生成器
    这一部分待加强!                (一)迭代器    一:简介    迭代是Python最强大的功能之一,是访问集合元素的一种方式。    迭代器是一个可以记住遍历的位置的对象。    迭代器对象从集合的第一个元素开始访问,...
    99+
    2023-01-30
    生成器 迭代
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作