标签:
1、高阶函数:把函数作为参数传入,这样的函数称为高阶函数。函数式编程就是指这种高度抽象的编程范式。
2、python内建了map() 和 reduce()
3、map()函数接收两个参数:一个函数,一个是序列;map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回
Eg:函数f(x)= x2 ,要把这个函数作用在一个list[1,2,3,4,5,6,7,8,9]上,就可以使用map实现
方法一:
def f(x):
return x*x
>map(f,[1,2,3,4,5,6,7,8,9]) [1, 4, 9, 16, 25, 36, 49, 64, 81]
方法二:
L=[]
for n in [1,2,3,4,5,6,7,8,9]:
L.append(f(n))
print L
map()函数计算简单,可以计算任意复杂的函数,比如,吧list所有数字转为字符串:>map(str,[1,2,3,4,5,6,7,8,9]) [‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘]
利用map()
函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:[‘adam‘, ‘LISA‘, ‘barT‘]
,输出:[‘Adam‘, ‘Lisa‘, ‘Bart‘]
4、reduce()把一个函数作用在序列[x1,x2,,,]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做积累计算
def add(x,y):
return x+y
>reduce(add,[1,3,5,7,9]) 25
5、python内建函数 filter() 用于过滤序列。也接收一个函数和序列。
filter()把传入的函数依次作用于每个元素,然后根据返回值是 True 还是 False 决定保留还是丢弃该元素
Eg:在一个list中,删除偶数,只保留奇数
def io_odd(n):
return n%2==1
>filter(is_odd,[1,2,4,5,6,9,10,15]) [1,5,9,15]
Eg:把一个序列中的空字符串删掉
def not_empty(s):
return s and s.strip()
>filter(not_empty,[‘A‘,‘ ’,‘B’,‘C’,None,‘ ’]) [‘A’,‘B’,‘C’]
6、python内置的 sorted() 函数可以对list进行排序;>sorted([36,5,12,9,21]) [5,9,12,21,36]
sorted()函数也是一个高阶函数,它可以接收一个高阶函数。还可以接收一个比较函数来实现自定义的排序
Eg:def reversed_cmp(x,y):
if x>y:
return -1
if x<y:
return 1
if x>y:
return 0
>sorted([36,5,12,9,21]) [36, 21, 12, 9, 5]
Eg:>sorted([‘bob‘, ‘about‘, ‘Zoo‘, ‘Credit‘]) [‘Credit‘, ‘Zoo‘, ‘about‘, ‘bob‘]
默认情况下,对字符串排序,是按照ASCII的大小比较的
需求:排序忽略大小写,按照字母排序 分析:实际上就是先把字符串都变成大写或小写,再比较
def cmp_ignore_case(s1, s2):
u1 = s1.upper() //upper()方法字符串中的小写字母转为大写字母,返回所有基于字符被转换为大写的字符串的一个副本;;
u2 = s2.upper() //Eg:
s = "Hello Good Boy Doiido 123456" print s.upper() 结果:HELLO GOOD BOY DOIIDO 123456
if u1 < u2:
return -1
if u1 > u2:
return 1
return 0
>sorted([‘bob‘, ‘about‘, ‘Zoo‘, ‘Credit‘], cmp_ignore_case) [‘about‘, ‘bob‘, ‘Credit‘, ‘Zoo‘]
7、匿名函数:关键字 lambda 表示匿名函数,冒号前面表示 函数参数。匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果
eg:以map()函数为例:>map(lambda x:x*x,[1,2,3,4,5,6])
标签:
原文地址:http://www.cnblogs.com/zzfighting/p/5651287.html