标签:
函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。
函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!
Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。
map函数:对list的每个元素作用于传入的函数中
def fc(x): return x*x print map(fc, [1, 2, 3, 4, 5, 6, 7, 8, 9])# 将list的每个元素在fc中调用;参数:函数、list 结果: [1, 4, 9, 16, 25, 36, 49, 64, 81]
def prod(x,y): return x*y List = [1, 2, 3, 4, 5, 6, 7, 8, 9] print reduce(prod,List)# 类似于1,2先传入prod,2*3传入,6*4传入... 结果: 362880
filter函数:和map()类似,filter()也接收一个函数和一个序列。和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素
def is_odd(n): return n % 2 == 1 filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]) # 结果: [1, 5, 9, 15]
把一个序列中的空字符串删掉:
def not_empty(s): return s and s.strip()# “s字符串” 与 “s字符串首尾删除空格后的字符串”的交集 filter(not_empty, [‘A‘, ‘‘, ‘B‘, None, ‘C‘, ‘ ‘]) # 结果: [‘A‘, ‘B‘, ‘C‘]
L = range(1,101) print L def dealMethond(x): return x%2 == 0 print filter(dealMethond, L) # 对L中的元素进行过滤
def reverse(s1, s2): if s1 < s2: return 1 elif s1 == s2: return 0 else : return -1 List = [‘a‘, 1, ‘d‘, ‘b‘,‘120‘] print sorted(List, reverse) # 可以自定义排序规则 结果:[‘d‘, ‘b‘, ‘a‘, ‘120‘, 1]
sorted(None, list)
返回函数:
高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回
标签:
原文地址:http://my.oschina.net/u/257801/blog/519436