模块和包
1. map函数和reduce函数:
map函数
-
用法一:
map(函数,序列) - 将原序列中的元素,按照函数给定的标准转换成新的序列
函数的要求:
a. 是一个函数
b. 有一个参数(指向后面的这个序列中的元素)
c。需要一个返回值(返回值就是新序列中的元素) -
用法二:
map(函数, 序列1, 序列2)
函数的要求:
a. 是一个函数
b. 有两个参数(分别指向后面两个序列中的元素)
c. 需要一个返回值(返回值就是新序列中的元素)
练习1:获取nums中的所有元素的个位数,产生一个新的列表
nums = [19, 78, 66, 51, 34, 98, 22]
result = map(lambda element: element % 10, nums)
print(type(result), id(result))
print(result)
print(list(result)) # [9, 8, 6, 1, 4, 8, 2]
练习2:产生一个新的序列,序列中的每个元素是math和Chinese的分数和: scores = [29, 43, 64, 96, 84]
math = [19, 23, 34, 56, 34]
chinese = [10, 20, 30, 40, 50]
result = map(lambda element, element1: element+element1, math, chinese)
print(list(result)) # [29, 43, 64, 96, 84]
练习3:合并两个列表形成一个字典
names = ['苹果', '小爱同学', '耳机', '天猫精灵']
nums = [1823, 22221, 891, 78]
# {'苹果':1823, '小爱同学':22221, '耳机':891, '天猫精灵':78}
result = map(lambda element, element1: (element, element1), names, nums)
# result = map(lambda element, element1: [element, element1], names, nums)
print(dict(result)) # {'苹果': 1823, '小爱同学': 22221, '耳机': 891, '天猫精灵': 78}
练习4:将三个列表数字拼成一个列表的数字
nums1 = [19, 78, 778, 90]
nums2 = [1, 2, 3, 4]
nums3 = [111, 222, 333, 444, 555]
result = map(lambda x, y, z: int(f'{x}{y}{z}'), nums1, nums2, nums3)
print(list(result)) # [191111, 782222, 7783333, 904444] 注意:555没拼上
reduce函数
-
用法一:
reduce(函数, 序列,初始值)
函数的要求:
a.函数
b.有且只有两个参数(第一个参数第一次指向初始值;从第二次开始指向上一次的计算结果);
第二个参数指向序列中的每个元素
c.有一个返回值(返回值决定合并规则)nums = [23, 34, 56, 67, 8] result = reduce(lambda x, y: x+y, nums, 0) print(result)
练习1:求所有的数的个位的和
nums = [23, 34, 56, 67, 8]
result = reduce(lambda x, y: x + y % 10, nums, 0)
print(result)
练习2:求所有的元素的数值的和
nums = [23, '78.9', 9, '10']
result = reduce(lambda x, y: x + float(y), nums, 0)
print(result)
练习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)
2. 模块的使用
①什么是模块
一个py文件就是一个模块,文件名就是模块名
Python中可以在一个模块中去使用另外一个模块(命名要规范)中所有的全局变量。
②导入模块
1)直接导入模块
import 模块名 - 导入指定模块,导入后需要通过’模块名.xxx’的形式使用模块中内容
2)直接导入模块中的变量
from 模块名 import 变量名1,变量名2,… - 导入模块中的指定变量
3)重命名
import 模块名 as 新模块名 - 给模块重命名,重命名后使用新的名字
from 模块名 import 变量名1 as 新变量名1,变量名2 as 新变量名2,… - 导入时给指定变量重命名
4)通配符
from 模块名 import * - 导入指定模块中所有的全局变量
# ====================== import 模块名=============
# import 模块名
# import test
#
# print(test.a)
#
# test.fun1()
#
# ==================== from - import ===========
# from test import a, name, fun1
# print(a)
# print(name)
# fun1()
#
#
# ===================给模块重命名==============
# import test as test2
# test = 'haha'
# print(test)
#
# print(test2.a, test2.name)
#
# ============= ====给变量重命名===============
# from test import a, name as name1
#
# name = '小明1'
# print(name, name1)
#
#
# =============通配符========================
# from test import *
# print(a, name)
# fun1()
③导入模块的原理
不管以什么样的方式导入模块,在导入模块的时候系统会自动进入被导入的模块,将模块中的代码全部执行一遍
Python导入模块的时候会自动检测被导入的模块之前是否已经导入过,如果已经导入过将不再重复导入
import test
from test import a
import test
import test
# 这个if外面的代码才是会被其他模块执行的代码
if __name__ == '__main__': # name可看做文件名 main可看做当前运行的文件主函数名
# 这个if里面的代码不会被其他模块执行,只能被自己执行
pass
2.包的使用
①什么是包
包就是用来管理多个模块的一种特殊的文件夹(包含有____init____.py文件的文件夹)
②怎么使用包中模块的内容
通过包导入内容的时候,会先执行____init____.py文件中的内容
=========方法一:======
import files.jsonFile
files.jsonFile.json_read()
=========方法二:======
import files.jsonFile as jf
jf.json_read()
=========方法三:======
from files import jsonFile
jasonFile.json_read()
=========方法四:=======
from files.jsonFile import json_read # json_read是函数名
json_read()
3. __init__
=====用法一:批量导入======
from files import jsonFile
from files import otherFile
from files import testFile
=====用法二:提取高频使用的部分内容====
from files import otherFile
from files import textFile
json_read = jsonFile.json_read
text_write = textFile.text_write
======用法三:封装通用功能=======
def open_file():
print('打开文件')