zoukankan      html  css  js  c++  java
  • day17

    day 17 笔记

    1.内容回顾

    1.1 函数(内置/自定义)

    • 基本函数结构

      def func(a1,a2):
        pass
      • 参数

      • 返回值

      • 执行函数

    • 函数小高级

      • 函数做变量

      • 函数做参数

    • 函数中高级

      • 函数做返回值

      • 函数的嵌套

    • 装饰器 & 闭包

    • 递归

    • 匿名函数

    • 内置函数

    1.2 模块(内置/第三方/自定义)

    • 定义模块

      • 内置:time/json/datetime/os/sys ... 【re模块】

      • 第三方:

        • 安装:

          • pip包管理工具: pip install xlrd

          • 源码安装:

            • 下载源码包:压缩文件。

            • 解压文件

            • 打开cmd窗口,并进入此目录:cd C:Python36Libsite-packages

            • 执行:python36 setup.py build

            • 执行:python36 setup.py install

        • 安装路径:C:Python36Libsite-packages

        • 你了解的第三方模块:

          • xlrd

          • requests

      • 自定义

        • py文件

        • 文件夹 __init__.py

    • 调用模块

      • import

        • import 模块1 模块1.函数()

        • import 模块1.模块2.模块3 模块1.模块2.模块3.函数()

      • from xx import xxx

        • from 模块.模块 import 函数 函数()

        • from 模块.模块 import 函数 as f f()

        • from 模块.模块 import * 函数1() 函数2()

        • from 模块 import 模块 模块.函数()

        • from 模块 import 模块 as m m.函数()

      • 特殊情况:

        • import 文件夹 加载__init__.py

        • from 文件 import *

    1.3 其他

    • 两个值数据交换

    • 推导式

      • 列表(*)

      • 字典

      • 集合

    总结

    • 基础知识

    • 逻辑能力

    • 面试题

    • 下阶段目标:锻炼编码能力。

    2.今日内容

    2.1 迭代器

    ··· 迭代器是对某种可迭代对象的每一个元素进行逐一获取,具有__next__()方法,且每次调用都会获取可迭代对象的一个元素(从前往后依次获取)

    ··· 列表转成迭代器

    v1=iter([1,2,3,4])
    v1=[1,2,3,4].__iter__()    # 两者等值

    ··· 迭代器获取值,反复调用__next__()方法

    v1=[1,2,3,4]
    # 列表转换成迭代器
    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)


    v1='alex'
    v2=iter(v1)
    while True:
       try:
           result = v2.__next__()
           print(result)
       except exception as e:
           break
    • 直到报错:StopIteration错误,表示已经迭代完毕。

    • 如何判别一个对象是否是迭代器:内部是否有__next__方法

    ···for循环的底层原理就是迭代器

    v1 = [11,22,33,44]

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

    2.2 可迭代对象

    ··· 内部有__iter__()方法且返回一个迭代器

    v1 = [11,22,33,44]
    result = v1.__iter__()

    ··· 可以被for循环

    2.3 生成器(函数的变异)

    # 函数
    def func():
       return 123
    func()
    # 生成器函数(内部是否包含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) # F1 1 F2 2 F3 100 F4
    def func():
       count = 1
       while True:
           yield count
           count += 1
           
    val = func()

    for item in val:
       print(item)

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

    def func():
        count = 1
        while True:
            yield count
            count += 1
            if count == 100:
                return
    
    val = func()
    for item in val:
        print(item)

    示例:读文件

    def func():
        """
        分批去读取文件中的内容,将文件的内容返回给调用者。
        :return:
        """
        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)

    2.4 总结

    • 迭代器,对可迭代对象中的元素进行逐一获取,迭代器对象的内部都有一个 next方法,用于以一个个获取数据。

    • 可迭代对象,可以被for循环且此类对象中都有 iter方法且要返回一个迭代器(生成器)。

    • 生成器,函数内部有yield则就是生成器函数,调用函数则返回一个生成器,循环生成器时,则函数内部代码才会执行。

      特殊的迭代器(**):

      def func():
         yield 1
         yield 2
         yield 3

      v = func()
      result = v.__next__()
      print(result)
      result = v.__next__()
      print(result)
      result = v.__next__()
      print(result)
      result = v.__next__()
      print(result)

      特殊的可迭代对象:

      def func():
         yield 1

      v = func()
      result = v.__iter__()
      print(result)
    •  

  • 相关阅读:
    Windows系统下八大具有高逼格的DOS命令之一【ping】
    NOIP初赛 之 逻辑运算
    动态规划 —— 背包问题一 专项研究学习
    使用前端原生 js,贪吃蛇小游戏
    纯html+css制作3D立方体和动画效果
    css3实现3D动画轮播图
    原生js的弹力小球
    小球的问题
    早期练手:功能相对比较完善的 js 计算器
    自动布局简介
  • 原文地址:https://www.cnblogs.com/usherwang/p/12903952.html
Copyright © 2011-2022 走看看