第三周 Day 3 —— Python模块和包
一、 高阶函数
1.map
—— 对序列中的元素进行变换或者合并
-
用法一:
map(函数,序列) —— 将原序列中的元素,按照函数给定的标准转换成新的序列。
函数的要求:a. 是一个函数
b. 有一个参数(指向后面的这个序列中的元素)
c. 需要一个返回值(返回值就是新序列中的元素)
# 获取nums中所有元素的个位数,产生一个新的列表 nums = [19, 78, 66, 51, 34, 98, 22] result = map(lambda item: item % 10, nums) print(list(result)) # [9, 8, 6, 1, 4, 8, 2]
-
用法二:
map(函数, 序列1, 序列2)
函数的要求:a. 是一个函数
b. 有两个参数(分别指向后面的两个序列中的元素)
c. 需要一个返回值(返回值就是新序列中的元素)
# 产生一个新的序列,序列中的每个元素是math和chinese的分数的和 math = [19, 23, 45, 65, 78] chinese = [48, 45, 68, 78, 56] result = map(lambda item1, item2: item1 + item2, math, chinese) print(list(result)) # [67, 68, 113, 143, 134] ########################################################### # 练习:将以下两个列表按照下面的要求转换字典: {'苹果': 1823, '小爱同学':22221, '耳机': 891, '天猫精灵': 78} names = ['苹果', '小爱同学', '耳机', '天猫精灵'] nums = [1823, 22221, 891, 78] result = map(lambda item1, item2: (item1, item2), names, nums) print(dict(result)) # {'苹果': 1823, '小爱同学': 22221, '耳机': 891, '天猫精灵': 78}
2. reduce
—— 按照指定规则对序列中的元素进行合并操作
使用之前加模块:from functools import reduce
-
用法一
reduece(函数, 序列, 初始值)
函数的要求:
a. 是个函数
b. 有且只有两个参数(第一个参数第一次指向初始值,从第二次开始指向上一次的计算结果;第二个参数指向序列中的每一个元素)
c. 有一个返回值(返回值决定合并规则)
# 求所有元素的和 nums = [19, 78, 66, 51, 34, 98, 22] result = reduce(lambda x, y: x + y, nums, 0) print(result) # 368
练习一:求所有的数的个位的和
nums = [23, 34, 56, 67, 8] result = reduce(lambda x, y: x + y % 10, nums, 0) print(result) # 28
练习二:求所有的元素的数值和
nums = [23, '78.9', 9, '10'] result = reduce(lambda x, y: x + float(y), nums, 0) print(result) # 120.9
练习3:求所有数字的乘积
nums = [23, 8.9, 'abc', True, '2'] result = reduce(lambda x, y: x * (y if type(y) in [int, float] else 1), nums, 1) print(result) # 204.70000000000002
二、模块
1. 什么是模块
一个py
文件就是一个模块。Python
中可以在一个模块中去使用另一个模块(命名要规范)中所有的全局变量。
2. 导入模块
- 方法一
import 模块名 —— 导入指定模块,导入后需要通过
模块名.xxx
的形式去使用模块中的内容(就是模块中的全局变量)
- 方法二
from 模块名 import 变量名1, 变量名2, … —— 导入指定模块中的指定变量;导入后直接使用变量
- 重命名
import 模块名 as 新模块名 —— 给模块重命名,重命名后使用新的名字
from 模块名 import 变量名1 as 新变量名, 变量名2 as 新变量名2,… —— 导入的时候给指定变量重命名
- 通配符
*
**from 模块名 import *** —— 导入指定模块中所有的全局变量
3. 导入模块的原理
不管以什么样的方式导入模块,在导入模块的时候系统会自动进入被导入的模块,将模块中的代码全部执行一遍。
Python导入模块的时候会自动检测被导入的模块之前是否已经导入过,如果已经导入过就不会重复导入。
if __name__ == ‘__main__’:
这个
if
外面的代码才是会被其他模块执行的代码
这个if
里面的代码不会被其他模块执行 ,只能被自己执行
三、包
1. 什么是包
包就是用来管理多个模块的一种特殊的文件夹(包含有__init__.py
文件的文件夹)。
2. 怎么使用包中的模块的内容
- 方法一
import 包名.模块名
使用:包名.模块名.内容
- 方法二
import 包名.模块名 as 新名字
使用:新名字.内容
- 方法三
from 包名 import 模块名
使用:模块名.内容
- 方法4
from 包名 import 内容
直接使用内容
即使在同一个包下调用另一个模块,也需要加包名。
3. __init__.py
导入包的时候,__init__.py
文件会先被执行。
-
批量导入包
可以在
__init__.py
这写上导入包的代码,使用时直接import 包名
就可以了。 -
提取高频使用的部分内容
在
__init__.py
中将常用的内容提取出来定义成全局变量,使用时直接from 包名 import 变量
。 -
封装通用功能