函数使用 (四)
- 定义:就是可以使用 for-in 进行遍历,并且可以使用 next 依次获取元素的对象
- 说明:
- 生成器就是一种特殊的迭代器
- 判断是否是迭代器
1
2
3
4from collections import Iterator
l = (i for i in range(10))
print(isinstance(l, Iterator)) - 字符串,列表,元组,集合,字典等都不是迭代器,但是他们都是可迭代对象。
- 定义:可以使用 for-in 遍历的对象,我们都称之为可迭代对象。
- 判断一个对象是否是可迭代对象。
1
2
3
4from collections import Iterable
print(isinstance(l, Iterable))
print(isinstance(lt, Iterable))
- 作用:将可迭代对象转换为迭代器
- 使用:
1
2lt2 = iter(lt)
print(isinstance(lt2, Iterable))
map
- 格式:
map(func, lt)
- 说明:接受两个参数,一个函数和可迭代对象,返回一个生成器 (map object),将 func 依次作用于 lt
- 示例:
1
2
3
4
5
6
71, 2, 3, 4, 5] l = [
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
8from functools import reduce
1, 2, 3, 4, 5] l = [
# 求和
lambda x, y: x + y, l) reduce(
15
# 转为为12345
lambda x, y: x * 10 + y, l) reduce(
12345 - 练习:
1
求列表中所有元素的乘积
- 格式:
filter
格式:
filter(func, lt)
说明:使用 func 依次作用于每个元素,处理结果为 True 的保留下来,返回生成器 (filter object)
示例:
1
2
3
4
5
61, 2, 3, 4, 5] l = [
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
8l = [
'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
4import 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
8import random
import zidingyi
# random.randint
# zidingyi.randint
from random import randint as r_rint
from zidingyi import randint as z_rint
测试模块
- 当一个模块作为主模块运行时,
__name__
的值为__main__
,当被其他模块导入使用时,值为模块名 - 经常这样写模块的测试代码
1
2if __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 包名
- 注意:若安装失败,可能是配置文件出错,也可能是目录没有权限操作