当前位置: 移动技术网 > IT编程>脚本编程>Python > s21day17 python笔记

s21day17 python笔记

2019年04月20日  | 移动技术网IT编程  | 我要评论

ca4354航班,国宝档案之觐天宝匣,一起恰恰恰

s21day17 python笔记

一、内容回顾及补充

  1. 回顾

  2. 补充

    • 第三方模块补充

      • 需要下载安装后才能导入使用

      • 安装方式:

        • pip包管理工具
        # 把pip.exe 所在的目录添加到环境变量中。
        pip install 要安装的模块名称  # pip install xlrd
        • 源码安装
        # 下载源码包(压缩文件) -> 解压 -> 打开cmd窗口,并进入此目录:cd c:\python37\lib\site-packages
        # 执行:python3 setup.py build
        # 执行:python3 setup.py install
      • 安装路径:c:\python37\lib\site-packages

      • 常用的第三方模块:requests / xlrd

二、 迭代器

2.1 基本知识

  1. 用途:对 某种对象(str/list/tuple/dict/set类创建的对象-可迭代对象)中的元素进行逐一获取

  2. 表象:具有__next__方法且每次调用都获取可迭代对象中的元素(从前到后一个一个获取)

  3. 示例:

    • 列表转换成迭代器:
      • v1 = iter([11,22,33,44])
      • v1 = [11,22,33,44].__iter__()
    • 迭代器想要获取每个值:反复调用 val = v1.__next__()
    v1 = [11,22,33,44]
    
    # 列表转换成迭代器
    v2 = iter(v1)
    
    # 迭代器获取每个值
    result1 = v2.__next__()
    print(result1)
    result2 = v2.__next__()
    print(result2)
    result3 = v2.__next__()
    print(result3)
    result4 = v2.__next__()
    print(result4)
    
    result5 = v2.__next__()
    print(result5)    # 报错:stoplteration    表示已经迭代结束
  4. for循环:运用了迭代器

    v1 = [11,22,33,44]
    
    # 1.内部会将v1转换成迭代器
    # 2.内部反复执行 迭代器.__next__()
    # 3.取完不报错
    for item in v1:
        print(item)

2.2 可迭代对象

  • 标记:
    • 内部具有 __iter__() 方法且返回一个迭代器。(*)
    • 可以被for循环

三、 生成器

3.1 基本知识

  1. 可以理解为:函数的变异、特殊的迭代器、特殊的可迭代对象

  2. 生成器的作用:

    • 生成数据
    • 迭代
  3. 示例:

    # 生成器函数(内部是否包含yield)
    def func():
        print('f1')
        yield 1
        print('f2')
        yield 2
        print('f3')
        yield 100
        print('f4')
    # 函数内部代码不会执行,返回一个 生成器对象 。
    v1 = func()
    # 生成器是可以被for循环,一旦开始循环那么函数内部代码就会开始执行。
    for item in v1:
        print(item)

3.2 总结

  1. 重点:

    • 函数中如果存在yield,那么该函数就是一个生成器函数
    • 调用生成器函数会返回一个生成器
    • 生成器只有被for循环时,生成器函数内部的代码才会执行,每次循环都会获取yield返回的值
  2. 建议:

    • 生成器函数中一般不要有return

    • 如果需要终止生成器函数中的循环,可以用return

      def func():
          count = 1
          while true:
              yield count
              count += 1
              if count == 100:
                  return
      val = func()
      for item in val:
          print(item)
  3. 生成器示例:读取大文件内容

    def func():
        #  分批去读取文件中的内容,将文件的内容返回给调用者。
        cursor = 0
        while true:
            f = open('db', 'r', encoding='utf-8')    # 通过网络连接上redis
            # 代指  redis[0:10]
            f.seek(cursor)
            data_list =[]
            for i in range(10):
                line = f.readline()
                if not line:
                    return
                data_list.append(line)
            cursor = f.tell()
            f.close()  # 关闭与redis的连接
    
            for row in data_list:
                yield row
    
    for item in func():
        print(item)

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网