day12模块和包

模块和包

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('打开文件')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值