python函数,高阶函数
1.zip函数,系统函数,可以将多个列表合并,生成一个新的列表,返回结果是生成器
# a = [49, 80, 78, 60]
# b = ['张三', '李四', '小明', '小红']
# d = ['13121111111', '13222222222', '1333333333s3', '13455555555']
# c = zip(a, b, d)
# 返回结果是生成器、
#print(c)
# <zip object at 0x000001F348564988>
# print(list(c))
# 将多个列表合并
# [(49, '张三'), (80, '李四'), (78, '小明'), (60, '小红')]
# 拆列表 zip(*seq) 拆成多个列表
# c = [(49, '张三', '13121111111'), (80, '李四', '13222222222'), (78, '小明', '1333333333s3'), (60, '小红', '13455555555')]
# x, y, z = zip(*c)
# print(x, y, z)
2.# 函数定义 格式:
# 1.小写字母_命名
# 2.函数格式
# def my_print(a,b,c):
函数体
不写return,默认返回None
函数调用:
# my_print(a=1, b=2, c=3)
# my_print(1, 2, 3)
# 3. 函数参数列表中有默认值的参数要放到没有默认值的后面
# 4.函数参数列表中有空字典的,空列表的,需要定义为None
# def my_print(b, a=None):
# if a is None:
# a = []
# a.append(b)
# print(a)
# my_print(b=2)
# my_print(b=3)
# 5.不定长参数 *args, args不能给参数取名字,传的是列表
# 6.**kwargs 传key value的格式,字典的格式
def ruxue(name, sex,age=6,*args,**kwargs):
print(f'姓名:{name}')
print(f'性别:{sex}')
print(f'年龄:{age}')
print('其他信息: ')
for i in args:
print(i)
for k, v in kwargs.items():
if k == 'address':
print(f'地址:{v}')
elif k == 'aihao':
print(f'爱好:{v}')
#1. 只传必填参数
ruxue('张三', '男', 8)
#输出结果:
# 姓名:张三
# 性别:男
# 年龄:8
# 其他信息:
#2.传不定长参数args:
ruxue('李四', '男', 6, '立水桥', '足球')
#输出结果:
# 姓名:李四
# 性别:男
# 年龄:6
# 其他信息:
# 立水桥
# 足球
#3.传带参数名称的不定长参数:
ruxue('李四', '男', 6, '张江路888号', address='立水桥', aihao='足球')
# 姓名:李四
# 性别:男
# 年龄:6
# 其他信息:
# 张江路888号
# 地址:立水桥
# 爱好:足球
#高阶函数
1.map(函数function,集合元素seq) 把函数当作一种算法,依次作用在序列的每一个元素上,生成新的序列,返回结果是生成器对象
def f(x):
return x**2
print( list(map(f, [1,2,3,4,5] )))
使用lamda:
print(list(map(lambda x: x ** 2, [1, 2, 3, 4, 5])))
#1.利用map()和匿名函数,用一行代码把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:[‘adam’, ‘LISA’, ‘barT’],输出:[‘Adam’, ‘Lisa’, ‘Bart’]
print(list(map(lambda x: x.capitalize(), ['adam', 'LISA', 'barT'])))
#2. 使用列表推导式,返回结果是生成器,可以直接进行迭代,可以使用list转成列表:
(i.capitalize() for i in ['adam', 'LISA', 'barT'])
3.高阶函数 reduce 计算:
使用之前需要先引包:
from functools import reduce
# reduce把算法作用在序列中两个元素上做累计运算,入参有两个,如下:
# print(reduce(lambda x, y: x + y, [1, 2, 3, 4, 5]))
# 15
# a = [1, 2, 3, 4, 5]
# print(reduce(lambda x, y: x * y, a))
# 120
4.高阶函数 filter 过滤 把算法作用在序列的每一个上,当计算结果为true时保留,否则删掉,返回的是生成器,可以使用list转成列表
接收一个布尔值返回值的函数和一个序列
把传入的函数依次作用于每个元素,根据返回值是True还是False决定保留还是丢弃该元素
例如: 需要将列表[1, 3, 4, 7, 8, 9] 中的偶数返回
print(list(filter(lambda x: x % 2 == 0, [1, 3, 4, 7, 8, 9])))
data = [["liulaoshi", "18", "学习"], ["tom", 25, "无"], ["hanmeimei", 26, "花钱"]]
# print(list(filter(lambda x: x[-1] != '无', data)))
5.高阶函数 sorted 排序
第一个参数是一个序列(或无序的队列如字典)
key指定一个接收参数的函数,这个函数接收序列中的每个元素,经过运算后返回一个值
该值就作为排序的依据。默认为None
reverse是一个布尔值。如果设置为True,列表元素将被倒序排列
sorted(seq, key=fun, reverse=True/False)
例如:
a = ['python', 'c', 'c++', 'c#', 'java', 'javascript']
# print(sorted(a, key=len))
a = (('a', 40), ('c', 35), ('b', 30))
# print(sorted(a, key=lambda x: x[1]))
# [('b', 30), ('c', 35), ('a', 40)]
# 把字典通过iemts方法转为二维元组,自定义排序规则,对二维元组每一项的第二项进行排序
a = {"a": 40, "c": 35, "b": 30}
# print(sorted(a.items(), key=lambda x: x[1], reverse=True))