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)

     三、装饰器

    回到顶部

  • 相关阅读:
    WebStorm 9 配置 Live Edit 功能与浏览器实现同步
    开源JS图片裁剪插件
    cropper手机使用实例
    Laravel中的Storage::disk
    laravel删除文件
    cropper.js移动端使用
    资本的一些运作规律及启示
    laravel文件存储、删除、移动等操作
    解决div和父div不上对齐
    ubuntu14.04如何卸载qq
  • 原文地址:https://www.cnblogs.com/yanxinjiang/p/10753711.html
Copyright © 2011-2022 走看看