新开课day13总结

参数类型说明

补充:

def fun0(a,b,c) -> int:#意思是返回值为int类型
    pass

匿名函数

认识匿名函数:看案例:

def fun():
    return lambda x,y,z:x+y+z
#fun()(1,2,3):后面的(1,2,3)就对应于lambda的x,y,z
print(fun()(1,2,3)) #6  

高阶函数

1.高阶函数:实参高阶和返回值高阶函数

  • 实参高阶:参数是函数的函数

  • 返回值高阶函数:返回值是函数的函数

2.函数参数的确定数据

  • x可以任何数据
def fun1(x):
    return x
  • x可以传整数、浮点数、布尔、列表、字符串、元组
def fun2(x):
    return x*2
  • x可以传列表、字符串、元组、字典
def fun3(x):
    return x[2]
  • x可以传函数名:可以接受不带实参的函数
def fun4(x):
    return x()
  • x可以传函数名:可以接受带2个实参的函数
def t(a,b):
    return a+b
def fun5(x):
    return x(1,2)+12
fun5(t)

常见的实参高阶函数

1.max,min,sorted(sort)

注意:函数的参数如果是函数,提供实参方式有两种: 1.直接使用匿名函数2. 使用普通函数的函数名

  • max:直接比较序列中元素的大小求最大值
    • 语法:max(序列,key = 函数)根据函数指定的比较规则比较序列中元素的大小获取最大值
    • 要求:有且只有一个参数(代表序列中的每个元素)
    • 要求:需要一个返回值(返回值代表比较对象:将参数看成序列中的元素, 返回值对应的位置描述清楚比较对象和元素)

案例:求个位数最大的值

def fun(x):
    return x%10
A = [12,23,43,21,543,645,75,18,78]
# 求个位数最大的值
print(max(A,key=lambda x1:x1%10))
print(max(A,key=fun))

案例:求students中分数最高的学生

students = [
    {'name': '小明', 'age': 19, 'score': 73},
    {'name': '小红', 'age': 22, 'score': 99},
    {'name': '小花', 'age': 32, 'score': 80},
    {'name': '张三', 'age': 20, 'score': 77}
]
print(max(students,key=lambda scores :scores['score']))

案例:按照年龄的大小对students中元素从小到大排序

print(sorted(students,key = lambda item:item['age']))

案例:将names中所有的元素按照每个名字的长度从大到小排序

students = ['秦时明月','秦时明月之君临天下','秦时明月之xxx','完美世界9']
print(sorted(students,key=lambda item:-len(item)))#根据长度来排序
#['秦时明月之君临天下', '秦时明月之xxx', '完美世界9', '秦时明月']

2.map

map语法:

  • map(函数,序列1)
    • 有且只有1个参数(代表序列中的每个元素)
    • 有一个返回值(就是序列中的元素)

案例:将所有元素乘以2

resu = list(map(lambda item:item*2,[1,2,3,4,5]))
print(resu)
#[2, 4, 6, 8, 10]
  • map(函数,序列1,序列2)
    • 有且只有2个参数(代表两个序列中的每个元素)

案例:计算三个学生的成绩

s1 = [89,98,98]
s2 = [89,98,94]
re = list(map(lambda x,y:x+y,s1,s2))
print(re) #[178, 196, 192]
  • map(函数,序列1,序列2,序列3)
    • 有且只有3个参数(代表三个序列中的每个元素)

案例:根据提供的学生信息,创建学生字典

names = ['张三', '李四', '王五', '小明']
genders = ['男', '女', '男', '男']
tels = ['1110', '12091', '27181', '18231']

def fun(x,y,z):
    return {'name': x, 'genser': y, 'tel': z}
print(list(map(fun,names,genders,tels)))
# [{'name': '张三', 'gender':'男', 'tel': '1110'}, ....]

练习1:根据两列表创建字典

keys = ['name', 'age', 'gender', 'tel']
values = ['小明', 18, '男', '110']

print(dict(map(lambda x,y:{x,y},keys,values)))
# 输出:{'name': '小明', 'age': 18, ...}

练习2:使用map函数将nums中所有的偶数除以2,所有的奇数乘以2

nums = [1, 4, 5, 7, 8]

re = map(lambda x:(x*2 if x%2!=0 else x//2),nums)
print(list(re)) # [2, 2, 10, 14, 4]

3.reduce:将序列中所有的元素合并成一个数据

语法:

  • reduce(函数,序列,初始值):将序 列中的元素按照函数制定的规则合并成一个数据

函数的要求:

  • 有且只有两个参数(第一个参数指向初始值,第二个参数代表序列中的每个元素)
  • 有一个返回值(用来描述合并规则)

案例:使用reduce求和

nums = [i for i in range(20)]
print(reduce(lambda x,y:x+y,nums))#190

案例:将nums中所有元素合并成一个数字

nums = [12, 30, 89, 76, 55]
print(reduce(lambda x,y:str(x)+str(y),nums))# 1230897655

迭代器

iter:容器型数据类型

特点:

  • 作为容器打印时无法显示元素,无法通过len()获取迭代器中元素的个数
  • 如果要使用迭代器中元素必须将元素从迭代器中取出来,而且一旦取出就无法再放回去。

怎么创建:

  • 将其他序列转化为迭代器
  • 创建生成器

怎么获取迭代器中元素:

注意:不管以什么样的方式获取到了迭代器中的元素,对应的元素- 定会从迭代器中消失

  • 查单个: next(迭代器)

    iter1 = iter('hello')
    print(next(iter1),end=',')
    print(next(iter1),end=',')
    print(next(iter1),end=',')
    
  • 遍历

    iter1 = iter('hello')
    for i in iter1:
        print(i)
    

生成器

容器型数据类型(生成器作为容器不具备同时保存多个数据的能力,具备的是创建多个数据的能力)

  • 打印生成器也无法查看生成器中的元素
  • 生成器无法统计个数
  • 获取生成器中的元素,也是取一个就少一个
  • 生成器获取元素的方式和迭代器一样

案例:

def fun(x,y):
    yield x,y
print(list(fun(2, 3)))# [(2, 3)]
print(next(fun(23,32)))# (23, 32)

案例:

def fun1():
    print('----_1_----')
    yield 100
    print('----_2_----')
    yield 200
    print('----_3_----')
    yield 300
re = fun1()
print(next(re))
# ----_1_----
# 100
print(next(re))
# ----_2_----
# 200
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值