1,map和reduce
① map - 对序列中的元素进行变换或者合并
用法一:
map(函数, 序列) - 将原序列中的元素,按照函数给定的标准转换成新的序列。
函数的要求:
a. 是一个函数
b. 有一个参数(指向后面的这个序列中的元素)
c. 需要一个返回值(返回值就是新序列中的元素)
用法二:
map(函数, 序列1, 序列2)
函数的要求:
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]
# 产生一个新的序列,序列中的每个元素是math和chinese的分数和:
math = [19, 23, 34, 56, 34]
chinese = [10, 20, 30, 40, 50]
result = map(lambda item1, item2: item1 + item2, math, chinese)
print(list(result)) # [29, 43, 64, 96, 84]
# 练习:将以下两个列表中按位置对应的元素转换字典:
names = ['苹果', '小爱同学', '耳机', '天猫精灵']
nums = [1823, 22221, 891, 78]
result = map(lambda item1, item2: (item1, item2), names, nums)
print(dict(result)) # {'苹果': 1823, '小爱同学': 22221, '耳机': 891, '天猫精灵': 78}
# 练习:将以下三个列表中按位置对应的元素合并为一个元素成为新的列表:
nums1 = [19, 78, 778, 90]
nums2 = [1, 89, 9, 2]
nums3 = [20, 23, 1, 119]
result = map(lambda x, y, z: int(f'{x}{y}{z}'), nums1, nums2, nums3)
print(list(result)) # [19120, 788923, 77891, 902119]
② reduce() - 按照指定规则对序列中的元素进行合并操作
用法一:
reduce(函数, 序列, 初始值)
函数的要求:
a. 函数
b. 有且只有两个参数(第一个参数第一次指向初始值,从第二次开始指向上一次的计算结果;第二个参数指向序列中的每个元素)。
c. 有一个返回值(返回值决定合并规则)
# 求所有元素的和
nums = [23, 34, 56, 67, 8]
def f(x, y):
print(f'x:{x}, y:{y}')
return x+y
result = reduce(f, nums, 0)
print(result)
# 练习1:求所有的数的个位的和
nums = [23, 34, 56, 67, 8]
result = reduce(lambda r, item: r+item % 10, nums, 0)
print(result)
# 练习2:求所有的元素的数值和
nums = [23, '78.9', 9, '10']
result = reduce(lambda r, item: r+float(item), nums, 0)
print(result)
# 练习3:求所有数字的乘积
nums = [23, 8.9, 'abc', True, '2']
result = reduce(lambda r, item: r*(item if type(item) in [int, float] else 1), nums, 1)
print(result)
③ 模块
什么是模块
一个py文件就是一个模块,文件名就是模块名
python中可以在一个模块中去使用另外一个模块(命名要规范)中所有的全局变量,但是得先导入。
导入模块
1)直接导入模块
import 模块名 - 导入指定模块,导入后需要通过’模块名.xxx’的形式取使用模块中内容
2)直接导入模块中的变量
from 模块名 import 变量名1, 变量名2,… - 导入指定模块中的指定变量;导入后直接使用变量
3)重命名
import 模块名 as 新模块名 - 给模块重命名,重命名后使用新的名字
from 模块名 import 变量名1 as 新变量名1, 变量名2 as 新变量名2,… - 导入的时候给指定变量重命名
4)通配符
from 模块名 import * - 导入指定模块中所有的全局变量
导入模块的原理
不管以什么样的方式导入模块,在导入模块的时候系统会自动进入被导入的模块,将模块中的代码全部执行一样
python导入模块的时候会自动检测被导入的模块之前是否已经导入过,如果已经导入过不会重复导入
④ 包
包就是用来管理多个模块的一种特殊的文件夹 (包含有__init__.py文件的文件夹)
# 2.怎么使用包中模块的内容
# ===========方法一:=========
# import files.jsonFile
# files.jsonFile.json_read()
# ===========方法二:=========
# import files.jsonFile as jf
# jf.json_read()
# ==========方法三:=========
# from files import jsonFile
# jsonFile.json_read()
# ==========方法四:=========
# from files.jsonFile import json_read
# json_read()
# 3.__init__.py
# 通过包导入内容的时候,会先执行__init__.py文件中的内容
# import files
# files.jsonFile.json_read()
# print(files.otherFile.abc)
# from files import *
# json_read()
# text_write()