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

    函数式编程:允许把函数本身作为参数传入另一个函数,还允许返回一个函数。

    1.高阶函数

    一个函数可以接收另一个函数作为参数,这种函数称为高阶函数

    def add(x,y,f):

          return f(x) + f(y)

    x = -5 、y = 6、  f = abs、  f(x) + f(y) = abs(-5) + abs(6) = 11

    return 11

    2.map/reduce

    map函数:接收两个参数,一个是函数,一个是可迭代对象。map的作用是将传入的函数依次作用到序列的每个元素,并将结果作为迭代器返回

    >>> def f(x):
    ...     return x * x
    ...
    >>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
    >>> list(r)
    [1, 4, 9, 16, 25, 36, 49, 64, 81]

    reduce函数:接收两个参数,一个是函数,一个是可迭代对象。reduce的作用是将每一个元素的函数结果作用到下一个元素中

    reduce(f,[x1,x2,x3,x4]) = f(f(f(x1,x2),x3),x4)

    def prod(x,y):
          return x * y

    print(reduce(prod,[1,3,5]))   #15

    3.filter

    filter函数用于过滤序列,同样接收函数和可迭代对象,将函数作用于每一个元素中,然后进行筛选

    4.sorted

    排序函数可以直接比较两个元素的大小

    sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
    ['about', 'bob', 'Credit', 'Zoo']

    5.返回函数

    函数嵌套函数时,将内部函数作为结果进行返回。内部函数可以引用外部函数的参数和局部变量。这种方式称为闭包。

    返回函数不要引用任何循环变量,或者是变化的变量。函数的返回值不是立即执行,而是在调用之后才开始执行。若要使用循环变量,则需要再创建新的函数,将该变量作为参数传入。

    6.匿名函数

    lambda x : x * x   =    def f(x):

                                            return x * x

    也可以先将匿名函数赋值给变量,再调用该变量。

    7.装饰器

    在代码动态运行期间动态增加功能,被称为装饰器(就是用一个透明的大函数包裹起来,在程序运行时调用这个函数)

    #定义

    def log(func):

          def wrapper(*args,**kw):

                print('call %s():' % func.__name__)  #两横

                return func(* args,**kw)

          return wrapper

    @log                                  =                 now = log(now)

    def   now():

            print('2018-12-11')

    #调用

    now()

    #输出

    call  now():

    2018-12-11

    8.偏函数

    偏函数位于functools的模块中,名称为partial。作用为将一个函数的某些参数给固定住,返回一个新的函数,从而增强作用。

  • 相关阅读:
    【leetcode】1630. Arithmetic Subarrays
    【leetcode】1629. Slowest Key
    【leetcode】1624. Largest Substring Between Two Equal Characters
    【leetcode】1620. Coordinate With Maximum Network Quality
    【leetcode】1619. Mean of Array After Removing Some Elements
    【leetcode】1609. Even Odd Tree
    【leetcode】1608. Special Array With X Elements Greater Than or Equal X
    【leetcode】1603. Design Parking System
    【leetcode】1598. Crawler Log Folder
    Java基础加强总结(三)——代理(Proxy)Java实现Ip代理池
  • 原文地址:https://www.cnblogs.com/bkyf/p/10102953.html
Copyright © 2011-2022 走看看