您的位置:首页 > 编程语言 > Python开发

Python基础----函数式编程

2018-01-08 17:43 501 查看
今天主要学习了Python函数式编程,在此总结一下

1.Python中函数也是一种对象,我们可以用变量来指向函数,并且实现调用。

f=abs
l=f(-10)
print(l)

#Output:10


2.函数中可以传入函数,这样的函数叫做高阶函数。

f=abs

def add(a,b,f):
c=a+b+abs(-1)
print('sum is %d'%c)

add(1,2,f)

#Output:sum is 4


上述add方法中, f作为参数传给了add。add方法是一个高阶函数。

3.Python提供了许多强大的内建函数供调用。比如reduce、map、fliter、sorted。接下来简要介绍一下这几个函数。

在介绍上述几个高阶函数之前,我们需要先了解一些有关Iterator(迭代器)和Iterable(可迭代)的基础知识。

给定一个list或者tuple,我们可以用for循环来遍历至二个list或者tuple。这种遍历称为迭代(Iteration)。

凡是可以直接作用于for循环的对象统统称为可迭代对象:Iterable。可用isinstance()来判断一个对象是否是Iterable。

凡是可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。可用isinstanceoc判断一个对象是否是Iterator对象。

Iterator是惰性的,他不会直接包含计算结果,可以使用list()把Iterator转为一个list。

了解完Iterable和Iterator之后,我们回过来看map。

map(func,seq)

map函数是一个内置的高阶函数。该方法把func 函数作用在参数seq的每一个元素上(这里的seq可以为list,可以为tuple),返回一个Iterator。

Iterator是一个惰性对象,他并不会直接包含你所想要的值,当你直接打印返回的Iterator时,你得到的并不会是你所期望的值,而是该对象的一些属性(内存地址)。若要得到该对象的值,我们可以使用list强制Iterator把结果计算出来,最后得到的是一个list。

def f(x):
return x*x
m=map(f,[1,2,3,4,5,6])
print(m)        #Output:<map object at 0x000002784869F128>
l=list(m)
print(l)        #Output:[1, 4, 9, 16, 25, 36]


reduce(func,seq)

reduce把func作用在seq的元素上,并把作用后的结果继续与seq的下一个元素做累积。

比如实现一个累积求和:

from functools import reduce

def f(x,y):
return x+y
s=reduce(f,[1,2,3,4,5,6])
print(s)        #Output:21


fliter(func,seq)

fliter把func作用在seq上,并根据返回值是True还是False来决定保留还是丢弃该元素。简单来说,fliter实现了一个筛选的功能。

def get_odd(x):
return x % 2 == 1

s=filter(get_odd,[1,2,3,4,5,6])
print(list(s))        #Output:[1, 3, 5]


sorted(seq,key,reverse)

如其名,sorted常用于排序,默认的sorted排序是根据ASCII码按照升序的方式来排列的。我们可以向sorted中传入一个函数实现特定需求的排序。如果我们需要得到他的反向排序时,我们可以把reverse指定为True。sorted排序并不会影响到原来的序列。

num=[4,2,6,-5,-9,3,8]

#默认排序
print(sorted(num))

#传入函数abs(绝对值)
print(sorted(num,key=abs))

#反向排序
print(sorted(num,key=abs,reverse=True))

Output:
[-9, -5, 2, 3, 4, 6, 8]
[2, 3, 4, -5, 6, 8, -9]
[-9, 8, 6, -5, 4, 3, 2]


可以看出,Python的函数式编程强大而灵活。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: