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))


 



 

 

posted @ 2021-01-20 01:56  maxwell11  阅读(105)  评论(0编辑  收藏  举报