我的第九篇博客---python的高阶函数

python的高阶函数

map():

map()函数用法:
map(function,iterable,...)
功能:将第一个参数function依次作用在参数可迭代对象中的每一个元素上,返回包含每次function函数返回值的新迭代器
参数:
function--函数,有几个参数,下面传几个可迭代对象
iterable--一个或多个可迭代对象(如,序列)
返回值:
python 3.x

实例:
def add(n,q,e):
return n+q+e
f=map(add,[1,2],{1,2},(1,2))
for x in f:
print(x)
结果是:
3
6

输出时也可以print(list(f))
结果是:
[3,6]
是将结果以一个列表的形式输出


def add(n):
return n*n
f=map(add,[1,2,3])
for x in f:
print(x)
结果是:
1
4
9

————————————————————————————————————————————————

reduce:

reduce()函数:
reduce(function,iterable[,initializer])
功能:
函数将一个数据集合(链表、元祖等)中的所有数据进行下列操作:
用传给reduce中的函数function(有两个参数)先对集合中的第1、2个元素进行操作,得到的结果再与第三个数据用function函数运算,最后得到一个结果
其效果类似:ruduce(f,[x1,x2,x3])=f(f(x1,x2),x3)
参数:
function--函数,有两个参数
iterable--可迭代对象
initializer--可选,初始参数

例如:
from functools import reduce
def add(x,y):
return x+y
q=[1,2,3,4]
f=reduce(add,q[2::])
print(f)
结果为7
列表也可以切片 要记住切片的范围是左闭右开

reduce里传的函数里只能有两个参数
map里可传一个、两个、三个。。。

 ————————————————————————————————————————————————

filter:

filter()函数
filter(function,iterable)
功能:
该接受两个函数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回True或False,最后将返回True的元素放到新的迭代器对象中
参数
function--判断函数
iterable--可迭代对象(如 序列)
返回值:
返回一个迭代器对象

实例:
def add(n):
return n%2==1
f=filter(add,[1,2,3,4])
for x in f:
print(x)
结果为:
1
3

dict2=[{'name':'小明','age':10},{'name':'小红','age':20},{'name':'校长','age':15}]
print(sorted(dict2,key=lambda x:x['age']))

————————————————————————————————————————————————————

sorted:

sorted()函数
sorted(iterable,key=abs,reverse=False)
功能:对所有可迭代对象进行排序操作
参数
iterable--可迭代对象
key--key指定的哈桑农户将作用于可迭代对象上的每一个元素,并根据key函数返回的结果进行排序
reverse--排序规则,reverse=True降序,reverse=False升序(默认)
返回值:
返回重新排序的列表

例如:
list=['I','am','and','student']
按照单词长度进行降序排序:
print(sorted(list,key=lambda x:len(x),reverse=True))
结果为:
['student', 'and', 'am', 'I']

stus=[
{"name":"zhangsan","age":18},
{"name":"zhangsan","age":17},
{"name":"zhangsan","age":19}
]
按照年龄升序排序
print(sorted(stus,key=lambda x : x['age']))
结果为:
[{'name': 'zhangsan', 'age': 17}, {'name': 'zhangsan', 'age': 18}, {'name': 'zhangsan', 'age': 19}]

结论:sorted()函数里第一个参数是可迭代对象
第二个参数是key=lambda x: x(可迭代对象中的元素)

 ————————————————————————————————————————————————

匿名函数:

f=lambda x : x
print(f(2))
结果为2


相当于
def f(n):
return n
print(f(2))

——————————————————————————————————————————————

偏函数:

偏函数由function.partial创建,它的作用是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单

实例:
import functools
def add(a,b):
return a+b
add2=functools.partial(add,b=10)
r=add2(5) #相当于 r=add(5,10)
print(r)
结果为:15

跟缺省函数差不多
def add(a,b=10):
return a+b
print(add(5))

——————————————————————————————————————

装饰器:

def w1(func):
def inner():
print('---1---')
print('123')
return inner
@w1 #相当于f=w1(f)
def fi():
print('555')
结果为:
123

def w1(func):
def inner():
print('---1---')
print('123')
return inner
@w1 #相当于f=w1(f)
def fi():
print('555')
f1()
结果为:
123
---1---

def w1(func):
def inner():
print('---1---')
func() #这里执行的是f1()函数
print('123')
return inner
@w1 #相当于f=w1(f)
def fi():
print('555')
f1()
结果为:
123
---1---
555

猜你喜欢

转载自www.cnblogs.com/sll-csdn/p/10809656.html