Python之高阶函数与内置高阶函数

1.高阶函数

高阶函数: 实参是一个函数名,函数的返回值也是一个函数

(1).函数本身也可以赋值给变量,变量也可以指向函数

# abs:求绝对值的函数
f = abs
print(f(-10))

在这里插入图片描述
(2).传递的参数包括函数名

f = abs
def fun(x,y,f):
    return f(x),f(y)
print(fun(-10,34,abs))

在这里插入图片描述
2.内置高阶函数

(1).map函数

map函数: 接收两个参数,一个是函数,一个是序列
map将传入的函数依次作用到序列的每个元素,并且把结果作为新的序列返回
注意: map函数返回的是一个序列

1.求序列中每个元素的绝对值

# map(函数,序列):传入的函数依次作用到序列的每个元素,并且把结果作为新的序列返回
# abs:求绝对值的函数
print(list(map(abs,[1,-2,-5,4,])))

在这里插入图片描述
2.求由10个在2-7范围内的随机数生成的序列中每个元素的阶乘

import random

# 1.定义阶乘函数
def jc(n):
    sum = 1
    for i in range(1,n+1):
        sum *= i
    return sum

# 2.生成由10个在2-7范围内的随机数组成的序列

# 一般方法:
# for i in range(10):
#     n = random.randint(2,7)
#     print(n,jc(n))

# 列表生成式:
li = [random.randint(2,7) for i in range(10)]
print(li)

# 3.利用map函数求列表中每个元素的阶乘
print(list(map(jc,li)))

在这里插入图片描述

(2).reduce函数

reduce函数: 把一个函数作用在一个序列上,这个函数必须接收两个参数,一个是函数,一个是序列
reduce把结果继续和序列的下一个元素累计计算
reduce(f,[x1,x2,x3,x4,x5]) = f(f(f(f(x1,x2),x3),x4),x5)
注意: reduce函数返回的是一个数(计算结果)

1.计算 1 * 2 * 3 * 4 * 5

# 导入reduce模块
from functools import reduce

def multi(x,y):
    return x*y

print(reduce(multi,range(1,6)))

在这里插入图片描述
2.计算1+2+3+4+5

# 导入reduce模块
from functools import reduce

def add(x,y):
    return x + y

print(reduce(add,[1,2,3,4,5]))

在这里插入图片描述
3.filter过滤函数

filter过滤函数: 和map类似,也接收一个函数和一个序列
但是和map不同的是,filter把传入的函数依次作用于每个元素然后根据返回值是True还是False决定保留还是丢弃该元素
注意: filter函数返回的是一个序列

输出100以内所有偶数:

def isodd(num):
    if num % 2 == 0:
        return True
    else:
        return False
# filter:保留返回值是True的元素
print(list(filter(isodd,range(100))))

在这里插入图片描述
4.sorted排序函数

使用sorted函数,排好序后的序列是一个列表

1.列表的排序

li = [5,3,2,4]
print(li)

# 1.sort方法: 排序(默认为顺序排列)
li.sort()
print(li)

# reverse=True:表示倒序排列倒序排列
li.sort(reverse=True)
print(li)

# 2.sorted函数: 排序(reverse=True:表示倒序排列)
a = sorted(li,reverse=True)
print(a)

在这里插入图片描述
2.字典的排序

(1).按照商品名称进行排序

info = {
    # 商品名称 商品数量 商品价格
    ('apple1',20,32),
    ('apple2',23,12),
    ('apple3',31,60),
    ('apple4',31,23),
    ('apple5',28,7)
}
# 集合的输出不一定是按定义的顺序输出的
print(info)
# print(type(info))

# 1).方式1:默认按照商品名称排序
print(sorted(info))
# 2).方式2:
def sorted_by_count(x):
    #print(x[0])
    return x[0]

print(sorted(info,key=sorted_by_count))

在这里插入图片描述
(2).按照商品数量进行排序

nfo = {
    # 商品名称 商品数量 商品价格
    ('apple1',20,32),
    ('apple2',23,12),
    ('apple3',31,60),
    ('apple4',31,23),
    ('apple5',28,7)
}
print(info)

def sorted_by_count(x):
    return x[1]

print(sorted(info,key=sorted_by_count))

在这里插入图片描述
(3).按照商品数量进行排序,如果商品数量一样,再按照商品价格排序

nfo = {
    # 商品名称 商品数量 商品价格
    ('apple1',20,32),
    ('apple2',23,12),
    ('apple3',31,60),
    ('apple4',31,23),
    ('apple5',28,7)
}
print(info)

在这里插入图片描述
(4).按照商品价格进行排序

nfo = {
    # 商品名称 商品数量 商品价格
    ('apple1',20,32),
    ('apple2',23,12),
    ('apple3',31,60),
    ('apple4',31,23),
    ('apple5',28,7)
}
print(info)

def sorted_by_price(x):
    return x[2]

print(sorted(info,key=sorted_by_price))

在这里插入图片描述
排序练习:

题目需求:
给定一个整形数组,将数组中所有的0移动到末尾,非0项保持不变;
在原始数组上进行移动操作,勿创建新的数组;

# 输入:
第一行是数组长度,后续每一行是数组的一条记录;
    4
    0
    7
    0
    2
# 输出:
调整后数组的内容;
    4
    7
    2
    0
    0

代码:

# 定义空列表
li = []
# 接收用户输入的第一个数:数组的长度
len = int(input())

# 1.按题目要求输入
# 接收用户输入的数组并依次添加到列表中
for i in range(len):
    num = int(input())
    # append:添加元素
    li.append(num)

# 2.排序    
# item是列表中的所有元素
def sorted_0(item):
    if item == 0:
        return 1
    else:
        return 0
# 根据 key:函数的返回值 排序
new_li = sorted(li,key=sorted_0)

# 3.按题目要求输出
print(len)
for i in new_li:
    print(i)

运行结果:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值