zoukankan      html  css  js  c++  java
  • 生成器

    列表推导式

    # 基本代码
    lt = []
    
    for i in range(10):
        lt.append(i)  # 输出0-9
    
    # 列表推导式
    lt = [i for i in range(10)] # 输出0-9
    
    #扩展
    lt = [i**2 for i in [1,2,3]]
    # lt = [i**2(可以做运算) for i in [1,2,3]]  # [1,4,9]
    
    print(lt)
    
    # python一切皆对象,range(10)属于可迭代对象
    
    from typing import Iterable # 导出一个可迭代对象类型
    
    print(isinstance(range(10),Iterable)) # 判断是否属于该数据类型
    #  True
    

    字典生成式

    # 基本代码
    dic = {}
    
    for i in range(10):
        dic[i] = i
    
    print(dic)
    
    # 字典生成式
    dic = {i:i**2 for i in range(10)}
    print(dic)
    
    # zip()
    res = zip([1,2,3],[4,2,3,4,2,3,4,2,3],'abcadsfasdfasdf')  # res是一个迭代器,__next__返回元组
    print(res.__next__()) # (1,4,'a') # type:tuple
    print(res.__next__()) # (2.2,'b') # type:tuple
    print(res.__next__()) # (3.3,'c') # type:tuple
    # print(res.__next__())  # type:tuple # 超过次数报错
    
    lt1 = ['a', 'b', 'c']
    lt2 = [1, 2, 3]
    
    dic = {k: v for k, v in zip(lt1, lt2)} #两个列表变成一个字典
    # dic = {k: v ** 2 for k, v in zip(lt1, lt2)}
    print(dic)
    
    lt = list('abc')  # list列表-->属于可迭代对象,一个值一个值迭代进去,list为容器类元素  
    print(lt)
    # ['a','b','c']
    

    生成器生成

    generator 本质是一个迭代器-->生成器:本质是迭代器,生成器就是一个自定义的迭代器

    g = (i for i in range(10000000)) # 生成器表达式:  看成老母鸡,节省内存空间,用就下蛋
    print(g)
    # for i in g:
    #     print(i)
    
    lt = [i for i in range(10000000)]  # 列表推导式: 看成一筐鸡蛋,非常占用内存空间
    print(lt)
    

    生成器

    # 生成器:含有yield关键字的函数叫做生成器
    
    # def func():
    #     pass
    #
    # print(func())
    
    def ge():
        yield 3  # 一个yield相当于一个next; 暂停函数
        yield 4
    
    
    # print(ge())  # ge()得到一个生成器 --> 生成器本质是迭代器
    
    g = ge()  # 得到一个生成器
    
    # print(g.__next__())
    # print(g.__next__())
    # print(g.__next__())
    
    # for i in g:
    #     print(i)
    
    
    
    
    # yield的特性
    
    # 1. 暂停函数
    # 2. 通过next取值
    
    
    # return的特性
    
    # 1. 终止函数
    # 2. 通过调用函数拿到值
    
  • 相关阅读:
    iOS,Layer
    iOS 手势冲突
    ECharts
    手动安装Package Control
    webstorm配置svn详解
    js 对象 类型转换
    google 跨域解决办法
    关于内层DIV设置margin-top不起作用的解决方案
    图片与文字在div里实现垂直水平都居中
    css3之3D翻牌效果
  • 原文地址:https://www.cnblogs.com/jzm1201/p/12595312.html
Copyright © 2011-2022 走看看