一、实参高阶函数
-
max/min/sorted/列表.sort/map/reduce
1)max/min/sorted/列表.sort,四则同理
"""
max基本用法:max(序列) - 直接比较序列中元素的大小求最大值
max高级用法:max(序列,key=函数) - 通过函数制定的比较规则来获取序列中元素的最大值
函数的要求:a. 是一个函数
b. 有且只有一个参数,这个参数指向的是序列中的每个元素
c. 有一个返回值,返回值就是真正的比较对象
"""
# 练习:获取nums中个位数最大的元素 -> 19
nums = [190, 82, 67, 34]
#最大值
result = max(nums, key=lambda item: item % 10)
print(f'result1:{result}')
#最小值
result = min(nums,key=lambda item:item % 10)
print(f'result1:{result}')
#sort个位数从大到小排序
nums.sort(key=lambda item: item % 10, reverse=True)
print(f'result1:{nums}')
#sorted个位数从大到小排序
new_nums = sorted(nums, key=lambda item: item % 10, reverse=True)
print(f'result1:{new_nums}')
2)map/reduce
#map
"""
map(函数, 序列) - 将序列中的元素通过函数指定的规则转换成一个新的序列中的元素
函数要求: 有且只有一个参数 - 指向后面的这个序列中的每个元素
有一个返回值 - 新序列中元素(用参数来代表原序列中的元素,描述出新序列中元素和原序列元素的关系)
map(函数, 序列1, 序列2) - 将两个序列中的元素通过函数指定的规则转换成一个新的序列中的元素
函数的要求:有且只有两个参数 - 分别指向后面两个序列中的元素
有一个返回值 - 新序列中元素(用参数来代表原序列中的元素,描述出新序列中元素和原序列元素的关系)
map(函数, 序列1, 序列2, 序列3)
函数的要求:有且只有三个参数 - 分别指向后面三个序列中的元素
有一个返回值
"""
#练习:已知两个数字列表,将第一个列表中元素的个位数作为十位数,第二个列表中元素的个位数作为个位数创建一个新的序列
nums1 = [23, 8, 914, 2]
nums2 = [9, 89, 7, 231]
result = list(map(lambda x, y: x % 10 * 10 + y % 10, nums1, nums2))
print(result)
#reduce
"""
reduce(函数, 序列, 初始值)
函数的要求: 有且只有两个参数 - 第一个参数指向初始值,第二个参数指向序列中的元素
返回值 - 确定合并方式(看元素和初始值进行什么样的操作来进行合并的)
"""
二、迭代器和生成器
- 什么是迭代器
"""
迭代器是容器型数据类型 - 可以遍历,也可以转换成列表或者元组等
打印迭代器无法查看元素;无法统计迭代器中元素的个数;
如果要获取迭代器的元素,必须将元素从迭代器中取出来,而且元素一旦取出,这个元素在迭代器中就不存在,也无法重新添加。
"""
1)迭代器的创建方式:用iter将其他的序列转换成迭代器(任何序列都可以转化成迭代器)
2)如何获取迭代器的元素
"""
1)获取单个元素
next(迭代器) - 获取当前迭代器最上面的那个元素
2)遍历
for 变量 in 迭代器:
循环体
"""
#注意:不管以什么样的方式得到了迭代器中的元素,那么被获取到的元素一定会从迭代器中消失
- 什么是生成器
"""
生成器是一种容器(保存不是多个数据,而且产生多个数据的算法) - 可以遍历,也可以转换成列表、元组等
生成器具备迭代器所有的特点:打印无法看到元素、无法统计个数、元素一旦获取对应的元素就会从生成器中消失
"""
1)怎样创建生成器
"""
调用一个带有yield关键字的函数就可以得到一个生成器。
如果调用的是普通函数,调用函数的时候会执行函数体,并且获取函数返回值;
如果调用的函数的函数体中有yield,调用函数的时候不会执行函数体,也不会获取函数返回值,得到的是一个生成器对象。
"""
练习:写一个生成器可以创建3个元素,分别是输出100、200和300
def get_num():
for x in range(100,301,100):
yield x
print(list(get_num()))
练习:写一个函数可以创建Python学生的学号的生成器
def num_creater():
for x in range(1, 1000):
yield f'python{x:0>3}'
print(list(num_creater))
三、模块
-
什么是模块: 一个py文件就是一个模块,模块名就是py文件的文件名
-
怎么在一个模块中使用另外一个模块中的内容。注意:只有模块名字是标识符并且不是关键的模块才能被其他模块使用(先导入才能用)
-
模块的分类:系统模块/自定义模块
-
导入模块的语法
"""
1) import 模块名 - 导入指定模块,导入后可以通过'模块名.'的方式使用这个模块中所有的全局变量
2) from 模块名 import 变量1, 变量2,... - 导入指定模块,导入后可以直接使用对应的变量
3) from 模块名 import * - 导入指定模块,导入后可以直接使用模块中所有的全局变量
4) 重命名
import 模块名 as 新模块名 - 对模块重命名
from 模块名 import 变量1 as 新变量1, 变量2,... - 对变量重命名
"""