day13 三大神器后续

    技术2024-05-13  78

    day13 三大神器后续

    三大神器之迭代器

    什么是迭代器

    迭代器是容器型数据类型,只能通过类型转换和生成器来获得迭代器对象 迭代器存储数据的特点:同时保存多个数据,美哦与办法直接查看,而是需要将数据从迭代器中取出来(取出来不能够放回去) 所有的容器都可以转换为迭代器

    获取迭代器中的元素

    无论通过什么方式,只要是将迭代器中的某个元素拿到了,那么这个元素在迭代器中就不存在了 iter1 = iter([10,20,30]) print(iter1) 获取元素 list1 = list(iter1) print(list1) >>>[10,20,30] list2 = list(iter1) print(list2) >>>[] #元素不存在了

    遍历

    iter5 = iter('hello!') for x in iter5: print(f'x:{x}')

    获取单个元素

    next(迭代器对象) 获取迭代器中的一个元素(当前最前面的那个元素) 迭代器对象.__newxt__() 获取迭代器中的一个元素(当前最前面的那个元素)

    三大神器之生成器

    什么是生成器

    a.概念1 生成器就是迭代器 b.概念2 调用一个带有yield 关键字的函数就可以得到一个生成器 def func1(): print('+++++') print('-----') yield result = func1() print(list(result)) >>>+++++ >>>----- >>>[None]

    生成器中元素怎么产生

    生成器能生产多少数据就看执行生成器对应的函数的函数体会遇到几次yield ; yield后面表达式的值就是生成器能 够产生的数据 # 示例一:创建一个可以生成3个数据的生成器,分别是:10,100,78 def creat_gender1(): yield 10 yield 100 yield 78 gen1 = creat_gender1() print(list(gen1)) >>>[10,100,78]

    生成器产生数据的原理

    当获取生成器元素的时候,会自动调用生成器关联的函数。第一次是从函数开始的地方开始执行,直到遇到yield为止 并将yield后面的值作为获取到的数据;后面每次都是从上一次结束的位置开始执行,直到遇到yield,如果从开始执行到函数结束 都没有遇到yield就不会产生数据(如果是用next去取的数据,这个时候会报错) 练习:写一个产生4位验证码的生成器(验证码由随机的4位数字和字母组成) import random def creat_code(): # str1 =''.join(random.sample( # ['z', 'y', 'x', 'w', 'v', 'u', 't', 's', 'r', 'q', 'p', 'o', 'n', 'm', 'l', 'k', 'j', 'i', 'h', 'g', 'f', 'e', # 'd', 'c', 'b', 'a','1','2','3','4','5','6','7','8','9','0'], 4)) alph = 'qwertyuiopasdfghjklzxcvbnm' str1 = alph + alph.upper + '123456789' while True: yield ''.join(choices(str1, k =4)) code1 = creat_code() print(f'验证码:{next(code1)}')

    生成式

    生成式就是生成器的简写

    列表推导式的【】改成()就变成了生成式

    list1 = [x*2 for x in range(5)] print(list1) gen1 = (x*2 for x in range(5)) ''' 相当于 def func(): for x in range(5): yield x*2 '''
    Processed: 0.012, SQL: 9