Python之高阶函数

###1.函数###

1.函数本身也可以赋值给变量,即:变量可以指向函数。

###2.函数名其实就是指向函数的变量###

如果给函数名赋值,则它就不是函数,如abs为函数名,给abs=1重新赋值后,abs已不是函数,而是一个整数。

 

###3.高阶函数###

1.定义:变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

###4.python里内置的高阶函数###

1).map函数:map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

a.对于序列每个元素求绝对值;
import random
print(list(map(abs,[-1,3,-4,-5])))

b.对于序列每个元素求阶乘;

2).reduce函数:reduce把一个函数作用在一个序列[x1,x2,x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做计算。

#       - python2中,为内置函数;
#       - python3中,导入reduce, from functools import reduce

a.求序列的累加和

b.阶乘

3).filter函数:filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

a.在一个list中,删掉偶数,只保留奇数:

4).sorted函数:

#1.lisort()和()两种方法的区别?
# 1).列表里面提供了sort方法,其它数据结构没有.sorted方法可以对任何可迭代对象排序
# 2).sort方法支持原地排序(变量排序后,变量本身改变),sorted排序后返回一个新的列表,并不改变原有变量

#默认sort和sorted方法由小到大进行排序排序,reverse=True时,由小到大进行排序
a.info = [
    # 商品名称  商品数量 商品价格
    ('apple3',200,32),
    ('apple4',40,12),
    ('apple1',40,2),
    ('apple2',1000,23),
]
print(sorted(info))
def sorted_by_count(x):
    return x[1]
def sorted_by_price(x):
    return x[2]
def sorted_bu_count_price(x):
    return x[1],x[2]
#按照商品的数量进行排序,key代表排序的关键字
print(sorted(info,key=sorted_by_count))
#按照商品的价格进行排序
print(sorted(info,key=sorted_by_price))
#如果数量一致,按照价格排序
print(sorted(info,key=sorted_bu_count_price))

b.对于字典里面嵌套字典进行排序
d = {
    '003':{
        'name':'apple1',
        'count':100,
        'price':10,
    },
    '002':{
        'name':'apple1',
        'count':200,
        'price':2
    }
}
print(d.items())
print(sorted(d.values(),key=lambda x:x['count']))
from operator import itemgetter
print(sorted(d.values(),key=itemgetter('price')))

5).函数作为返回值:高阶函数除了可以接收函数作为参数外,还可以把函数作为结果值返回。

6).匿名函数:当我们在传入函数时,有些时候,不需要现实地定义函数,直接传入匿名函数更方便。

     关键字lambda表示匿名函数,冒号前面的x表示函数参数。

a.info = [
    # 商品名称  商品数量 商品价格
    ('apple3',200,32),
    ('apple4',40,12),
    ('apple1',40,2),
    ('apple2',1000,23),
]
#匿名函数定义规则:lambda 形参:返回值
print(sorted(info,key=lambda x:x[1]))

from operator import itemgetter
print(sorted(info,key=itemgetter(1)))
print(sorted(info,key=itemgetter(2)))
print(sorted(info,key=itemgetter(1,-2)))

b. 有一个整数列表(10个元素),要求调整元素顺序把所有的奇数放在前面,偶数放在后面
import random
li = [random.randint(1,10) for i in range(10)]
print(li)
print(sorted(li,key=lambda x: 1 if x%2 == 0 else 0))
print(sorted(li,key=lambda x: x%2==0))

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值