函数式编程

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])

       

原文地址:https://www.cnblogs.com/zzfighting/p/5651287.html