zoukankan      html  css  js  c++  java
  • python函数式编程

    python函数式编程

    1、高阶函数的定义:

          函数名也是变量,

          传入函数

         既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

          一个最简单的高阶函数:

      def add(x, y, f):
          return f(x) + f(y)
    1)、map/reduce
       map()函数接收两个参数,一个是函数,一个是Iterablemap将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

         再看reduce的用法。reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

        reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
    练习题:
    利用mapreduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456

    def str2float(s):
    counts = s.find('.')
    return reduce(lambda x,y:x*10+y,map(int,s[:counts])) + 0.1*reduce(lambda x,y:x*0.1+y,map(int,s[len(s)-1:counts:-1]))
    print(str2float('123.456'))

    2)、filter

    filter函数传入两个参数,传入的函数会作用于序列的每个元素,并将不符合传入函数要求的过滤掉。
    filter返回的也是一个迭代器Iterator

      用filter求素数

      计算素数的一个方法是埃氏筛法

          

      def _odd_iter():
    n = 1
    while True:
    n = n + 2
    yield n
    #注意这是一个生成器,并且是一个无限序列。
    #然后定义一个筛选函数:
    def _not_divisible(n):
    return lambda x: x % n > 0
    #最后,定义一个生成器,不断返回下一个素数:
    def primes():
    yield 2
    it = _odd_iter()
    while True:
    n = next(it)
    yield n
    it = filter(_not_divisible(n), it)

    for n in primes():
    if n <1000:
    print(n)
    else:
    pass

      3)、sorted

         sorted()也是一个高阶函数。用sorted()排序的关键在于实现一个映射函数。

                   sorted(L,key=,reverse=)

       练习

      假设我们用一组tuple表示学生名字和成绩:

      L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
    

      请用sorted()对上述列表分别按名字排序:

           L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
        def by_name(t):
         return t[0]

        def by_score(t):
         return t[1]
        print(sorted(L,key=by_name))
        print(sorted(L,key=by_score,reverse=True))


  • 相关阅读:
    Oracle 数据库简介
    Qt 中事件与处理
    npm常用命令总结
    自适应宽度布局
    原生js发送ajax请求
    微信调试本地环境代码
    多行文本溢出显示省略号
    清除浮动
    用JQuery动态为选中元素添加/删除类
    input中加入搜索图标
  • 原文地址:https://www.cnblogs.com/wuchenggong/p/8778729.html
Copyright © 2011-2022 走看看