• python基础---->迭代器、生成器、装饰器


    一、迭代器(iterator)

    特点:

    • 迭代器是访问集合元素的一种方式,迭代器对象从集合的第一个元素开始访问,直到
      所有的元素被访问完结束。
    • 迭代器只能往前不会后退;
    • 不要求先准备好整个迭代过程中所有的元素。迭代器仅仅在迭代到某个元素时才计算该元素,在这之前或之后元素可以不存在或者被销毁;
    • 访问者不需要关心迭代器内部的结构,仅需通过 .__next__()方法不断去取下一个内容,通过 .__iter__() 返回迭代器自身
    • 不能随机访问集合中的某个值 ,只能从头到尾依次访问;

    实例

    >>> city = ['wuhan','shenzhen','chongqing','huanggang']
    >>> city 
    <list_iterator object at 0x101402630>
    >>> city .__next__()  #方法一:使用next方法来使用迭代器
    'wuhan'
    >>> city .__next__()
    'shenzhen'
    >>> city .__next__()
    'chongqing'
    >>> city .__next__()
    'huanggang'
    >>> city .__next__()   # 如果容器中没有更多元素了,则抛出StopIteration异常
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    StopIteration
    
    
    # 方法二:使用for循环来使用迭代器
    it = iter(city)
    for x in it:
        print(x)

    二、生成器(generator)

    定义:

    一个包含了yield关键字的函数就是一个生成器,该函数也叫生成器函数。当生成器函数被调用时,在函数体中的代码不会被执行,而会返回一个迭代器。每次请求一个值,就会执行生成器中代码,直到遇到一个yield表达式或return语句。yield表达式表示要生成一个值,return语句表示要停止生成器。换句话说,生成器是由两部分组成,生成器的函数和生成器的迭代器。生成器的函数是用def语句定义的,包含yield部分;生成器的迭代器是这个函数返回的部分。二者合起来叫做生成器。

    实例一:

    a = [i*i for i in range(1,10)]
    print(a)
    
    # 结果:[1, 4, 9, 16, 25, 36, 49, 64, 81]

    实例二:利用生成器自定义range

    def drange(num):
        temp = -1
        while True:
            temp = temp + 1
            if temp >= num:
                return
            else:
                yield temp

    三、装饰器

    特点:

    • 不能修改被装饰的函数的源代码
    • 不能修改被装饰的函数的调用方式
    • 满足上面的两种情况下给程序增添功能

    实例一:一个简单装饰器实现计算函数运行的时间

    # -*- coding:utf-8 -*-
    # @Author  : Clint
    # @File    : calculate_time.py
    import time
    
    
    def cal_time(func):
        def wrapper(*args, **kwargs):
            start_time = time.time()
            x = func(*args, **kwargs)
            end_time = time.time()
            print(func.__name__+"的time cost:", end_time-start_time)
            return x
        return wrapper
    
    
    @cal_time    #语法糖  test=timer(test)
    def test_func(): 
    time.sleep(
    3)
    print("fun_test...") # 结果 test_func的time cost:3.000171661376953

    实例一:装饰有参函数

    import time
    
    def timer(func):
        def deco(*args,**kwargs):
            start_time = time.time()
            func(*args,**kwargs)
            stop_time = time.time()
            print(stop_time-start_time)
        return deco
    
    @timer
    def test(parameter):
        time.sleep(3)
        print("test is running")
    test("添加参数")
  • 相关阅读:
    sql小练习
    登录测试点
    游戏签到
    移动端和pc端微信加入群聊
    小说
    微信语言输入
    linux tar压缩解压缩命令详解
    linux使用nginx配置web服务器
    FFmpeg 视频处理入门教程
    Git学习
  • 原文地址:https://www.cnblogs.com/Utopia-Clint/p/10878081.html
Copyright © 2020-2023  润新知