Python基础----函数式编程
2018-01-08 17:43
501 查看
今天主要学习了Python函数式编程,在此总结一下
1.Python中函数也是一种对象,我们可以用变量来指向函数,并且实现调用。
2.函数中可以传入函数,这样的函数叫做高阶函数。
上述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。
reduce(func,seq)
reduce把func作用在seq的元素上,并把作用后的结果继续与seq的下一个元素做累积。
比如实现一个累积求和:
fliter(func,seq)
fliter把func作用在seq上,并根据返回值是True还是False来决定保留还是丢弃该元素。简单来说,fliter实现了一个筛选的功能。
sorted(seq,key,reverse)
如其名,sorted常用于排序,默认的sorted排序是根据ASCII码按照升序的方式来排列的。我们可以向sorted中传入一个函数实现特定需求的排序。如果我们需要得到他的反向排序时,我们可以把reverse指定为True。sorted排序并不会影响到原来的序列。
可以看出,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的函数式编程强大而灵活。
相关文章推荐
- Python基础学习代码之函数和函数式编程
- python基础-函数式编程
- Python基础之四函数式编程
- Python基础:函数式编程
- Python基础:09函数式编程
- 用Python进行基础的函数式编程的教程
- Python基础进阶篇——函数式编程
- 2015/9/18 Python基础(14):函数式编程
- Python基础III---函数式编程
- Python学习基础(9):函数式编程
- Python基础- 函数式编程
- Python基础:函数式编程
- Python 函数式编程
- Python函数式编程指南(三):迭代器
- Python进阶 函数式编程和面向对象编程等
- python基础编程_10_生成水仙花数
- Python学习笔记,函数式编程,高阶函数
- Python开发基础-Day10生成器表达式形式、面向过程编程、内置函数部分
- Python基础<十二:网络编程>
- [PYTHON] 核心编程笔记之三-Python基础