zoukankan      html  css  js  c++  java
  • Python基础(四)

    一、迭代器

          让不同数据类型具有相同的遍历方式:list、dict、str、tuple、set

    1、特点:

    ①省内存

    ②只能向前,不能反复

    ③惰性机制

    2、可迭代对象

    ###dir() 查看我们数据类型可以执行的操作###
    
    print(dir(str))  # 如果有'__iter__'方法,说明就是可迭代对象
    print(dir(list)) # '__iter__'

    ①查看set集合可执行的操作里有没有  __iter__ 方法

    print("__iter__" in dir(set))
    True

    ②列表变成一个迭代器

    lst = ["张三", "李四", "王五", "赵六"]   #列表
    it = lst.__iter__()     # iterator 迭代器
    print(it)  #迭代器操作方法里有  '__iter__''__next__' 

    ③遍历迭代器

    lst = ["张三", "李四", "王五", "赵六"]
    it = lst.__iter__() # iterator 迭代器
    
    for name in it:
        print(name)

    ④从迭代器取数据

    ###从迭代器获取到数据: __next__()###
    print(it.__next__())          #一次取一个数据
    print(it.__next__())
    print(it.__next__())

    数据取完时报错: StopIteration 停止迭代. 没有数据了

    3、判断一个变量是否是迭代器,可迭代对象

    from collections import Iterable, Iterator
    lst = [1,2,3]
    print(isinstance(lst, Iterable)) # 判断列表是否是可迭代的
    print(isinstance(lst, Iterator)) # 判断列表是否是是迭代器
    from collections import Iterable, Iterator
    lst = ["张三", "李四", "王五", "赵六"]
    it = lst.__iter__()
    print(isinstance(it, Iterable)) # 判断列表是否是可迭代的
    print(isinstance(it, Iterator)) # 判断列表是否是是迭代器

    4、函数传参判断是否可迭代对象

    from collections import Iterable,Iterator
    def func(n):
        if isinstance(n, Iterable): # 判断是否是可迭代对象
            for item in n:
                print(item)
        else:
            print(n)
    
    func("哈哈哈")

     二、生成器

        本质上就是一个迭代器,同样节省内存

    1、生成器函数

    def func():
          yield
    ###生成器函数  -> 执行的时候,不会立即把函数全部执行完,创建一个生成器返回
    def func():
        print("哈哈哈")
        yield 1    #有yield 就是一个生成器函数. 会创建一个生成器对象给你
        print("吼吼吼")
        yield 2    #可以把一个函数分段执行
        print("我是最后执行……")
    gen = func()   # generator  生成器
    print("__iter__" and "__next__" in dir(gen))
    需要执行__next__ 才会让生成器执行一次
    def func():
        print("哈哈哈")
        yield 1 # 有yield 就是一个生成器函数. 会创建一个生成器对象给你
        print("吼吼吼")
        yield 2 # 可以把一个函数分段执行
        print("我是最后执行……")
    gen = func()  # generator  生成器
    ret = gen.__next__() # 执行到下一个yield
    print(ret)

    2、应用

    def order():
        for i in range(10000):
            yield "衣服"+str(i)
    
    gen = order() # 定义, 创建一个生成器对象
    
    print( order().__next__()) #执行一次取一件衣服
    print( order().__next__()) #执行一次取一件衣服

    3、推导式

    ①列表推导式:[结果 for循环 if语句]

    ②字典推导式:{key:value for if}

    ③集合推导式:{key for if}


    ④生成器表达式:(结果 for if)

     三、装饰器

    回到顶部

  • 相关阅读:
    linux下vim更改注释颜色
    使用web3j工具生成java版本的智能合约
    Pycharm增加新安装Python的路径
    Python第三弹--------文件和异常
    (转)以太坊(Ethereum)创世揭秘 以太坊(Ethereum)创世揭秘
    (转)以太坊(Ethereum)全零地址(0x000000...)揭秘
    (转)Java大数操作(BigInteger、BigDecimal)
    关于SimpleDateFormat时间转换总是显示1970年的问题
    以太坊abi
    (转)以太坊私链的挖矿速度与难度值的关系
  • 原文地址:https://www.cnblogs.com/yanxinjiang/p/10753711.html
Copyright © 2011-2022 走看看