函数使用 (四)

迭代器(Iterator)

  • 定义:就是可以使用 for-in 进行遍历,并且可以使用 next 依次获取元素的对象
  • 说明:
    • 生成器就是一种特殊的迭代器
    • 判断是否是迭代器
      1
      2
      3
      4
      from collections import Iterator

      l = (i for i in range(10))
      print(isinstance(l, Iterator))
    • 字符串,列表,元组,集合,字典等都不是迭代器,但是他们都是可迭代对象。

可迭代对象

  • 定义:可以使用 for-in 遍历的对象,我们都称之为可迭代对象。
  • 判断一个对象是否是可迭代对象。
    1
    2
    3
    4
    from collections import Iterable

    print(isinstance(l, Iterable))
    print(isinstance(lt, Iterable))

iter 函数

  • 作用:将可迭代对象转换为迭代器
  • 使用:
    1
    2
    lt2 = iter(lt)
    print(isinstance(lt2, Iterable))

高级函数

  • map

    • 格式:map(func, lt)
    • 说明:接受两个参数,一个函数和可迭代对象,返回一个生成器 (map object),将 func 依次作用于 lt
    • 示例:
      1
      2
      3
      4
      5
      6
      7
      >>> l = [1, 2, 3, 4, 5]
      >>> map(lambda x: x * 2, l)
      <map object at 0x0000021893848C40>
      >>> list(map(lambda x: x * 2, l))
      [2, 4, 6, 8, 10]
      >>> list(map(lambda x: x * x, l))
      [1, 4, 9, 16, 25]
    • 练习:
      1
      处理一个元素为字符串的列表,要求将字符串两遍的空白去掉,然后首字母大写
  • reduce

    • 格式:reduce(func, lt)
    • 说明:接受两个参数,一个函数和一个可迭代对象,首先取两个元素,使用 func 处理,结果和第三个元素继续使用 func 处理,直到结束,返回处理的结果。
    • 示例:
      1
      2
      3
      4
      5
      6
      7
      8
      >>> from functools import reduce
      >>> l = [1, 2, 3, 4, 5]
      # 求和
      >>> reduce(lambda x, y: x + y, l)
      15
      # 转为为12345
      >>> reduce(lambda x, y: x * 10 + y, l)
      12345
    • 练习:
      1
      求列表中所有元素的乘积
  • filter

    • 格式:filter(func, lt)

    • 说明:使用 func 依次作用于每个元素,处理结果为 True 的保留下来,返回生成器 (filter object)

    • 示例:

      1
      2
      3
      4
      5
      6
      >>> l = [1, 2, 3, 4, 5]
      >>> filter(lambda x: x % 2 == 0, l)
      <filter object at 0x00000218938867F0>
      # 提取偶数
      >>> list(filter(lambda x: x % 2 == 0, l))
      [2, 4]
    • 练习:

      1
      提取奇数,并且能被三整除的元素
  • sorted

    • 说明:
      • 排序,返回一个新列表,包含可迭代对象中的所有元素,默认按升序排列
      • 可以提供自定义键函数来自定义排序顺序
      • 可以设置 reverse=True 用于降序排序
    • 示例:
      1
      2
      3
      4
      5
      6
      7
      8
      >>> l = [
      ... {'name': 'xiaowang', 'age': 18, 'height': 150},
      ... {'name': 'xiaogang', 'age': 20, 'height': 140},
      ... {'name': 'xiaohong', 'age': 19, 'height': 145}
      ... ]
      # 按照age字段,进行降序排序
      >>> sorted(l, key=lambda x: x['age'], reverse=True)
      [{'name': 'xiaogang', 'age': 20, 'height': 140}, {'name': 'xiaohong', 'age': 19, 'height': 145}, {'name': 'xiaowang', 'age': 18, 'height': 150}]

模块使用

  • 定义:

    • 模块就像一个工具包一样,里面有很多的工具(函数,类),使用时需要通过 import 导入。
  • 分类:

    • 标准库:random、sys、os、time
    • 第三方:就是好人已经写好的特定功能的模块,你可以直接使用 pip 命令安装
    • 自定义:自己写的
  • 导入:

    1
    2
    3
    4
    import random                 # 导入
    import random as rdm # 导入并起别名
    from time import sleep # 指定导入
    from time import sleep as sp # 指定导入并起别名
    起别名后只能使用别名
  • 模糊导入:

    1
    from random import *

    导入 random 模块中__all__列表指定的内容

  • 自定义模块

    • 新建一个文件,不与其他模块同名即可
    • 新建的文件名(去掉后缀)就是模块
    • 导入方式与官方的相同
    • 文件名(模块名)就是命名空间,不同命名空间下的标识符可以同名
    • 当使用几个模块中的相同的(函数)标识符时,可以通过命名空间或起别名解决
      1
      2
      3
      4
      5
      6
      7
      8
      import random
      import zidingyi

      # random.randint
      # zidingyi.randint

      from random import randint as r_rint
      from zidingyi import randint as z_rint
  • 测试模块

    • 当一个模块作为主模块运行时,__name__的值为__main__,当被其他模块导入使用时,值为模块名
    • 经常这样写模块的测试代码
      1
      2
      if __name__ == '__main__':
      print('测试代码')
    • 定义:多个模块放在同一目录下,目录下有一个__init__.py 文件,这个目录就是一个包
    • 说明:一个目录要想成为一个包,必需包含一个__init__.py 文件,即使该文件为空(可以简化导入书写)
  • 安装第三方模块

    • 工具:pip

    • 镜像:

      1
      2
      3
      4
      5
      6
      清华:https://pypi.tuna.tsinghua.edu.cn/simple
      阿里云:http://mirrors.aliyun.com/pypi/simple/
      中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
      华中理工大学:http://pypi.hustunique.com/
      山东理工大学:http://pypi.sdutlinux.org/
      豆瓣:http://pypi.douban.com/simple/
    • 修改 pip 源

      • 在用户的家目录下创建 pip 目录
      • 在 pip 目录下创建 pip.ini 文件
      • 在 pip.ini 文件中添加如下内容
        1
        2
        3
        [global]
        index-url = http://mirrors.aliyun.com/pypi/simple/
        trusted-host = mirrors.aliyun.com
    • pip 命令

      • 作用:安装软件包,自动安装相关的依赖
      • 安装软件包:pip install 包名
      • 卸载软件包:pip uninstall 包名
      • 列表显示包:pip list
      • 查看指定包:pip show 包名
      • 注意:若安装失败,可能是配置文件出错,也可能是目录没有权限操作