美文网首页
python函数式编程

python函数式编程

作者: LittleTrue | 来源:发表于2018-10-06 02:41 被阅读0次

高阶函数

lamada表达式构建匿名函数/ 声明普通函数的函数名都可以当做一个变量, 那么这个变量当然可以被传入函数中。

把函数作为参数使用的函数, 叫高阶函数

python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率

  • map() python内置的一个高阶函数,它接收一个函数f和一个list,并且把list的元素以此传递给函数f,然后返回一个函数f处理完所有list元素的列表

  • filter() 函数接收一个函数f和一个list,这个函数f的作用是对每个元素进行判断,返回true或false,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件的元素组成的list;

  • sorted接受三个参数,返回一个排序之后的list。
    --第一个接受一个可迭代的对象(因为sorted实现了迭代协议,所以接受的参数不一定需要list,可以迭代的对象就可以,也是duck typing),返回一个排序之后的列表。
    --第二个接受一个布尔值,选择是否反转排序结果。
    --第三个接受一个回调函数,这个回调函数只能有一个参数(如果有多个参数,请用偏函数),根据这个函数的返回值进行排序。


返回函数

需要注意的是, 在返回闭包中, 不能引用任何循环变量

def f():
    print 'call f()...'
    # 定义函数g:
    def g():
        print 'call g()...'
    # 返回函数g:
    return g

装饰器

装饰器(Decrator)

  • 在不改动函数代码的基础上无限制扩展函数功能的一种机制,
  • 本质上讲,装饰器是一个返回函数高阶函数
  • 装饰器的好处是,一点定义,则可以装饰任意函数
  • 一旦被其装饰,则则把装饰器的功能直接添加到定义函数的功能上
装饰器的使用:

使用@语法,即在每次要扩展到函数定义前使用@+函数名

#既不需要侵入,也不需要函数重复执行
import time
def deco(func):
    def wrapper():  //如果被引用方法带参数, 加入参数*args, **kwargs  即带不定参数
        startTime = time.time()
        func()//如果被引用方法带参数, 加入参数*args, **kwargs  即带不定参数
     #从这里也可以发现, 装饰器仍然必须保留了原函数的调用, 这说明了
      #(1) 装饰器不能修改被装饰的函数的源代码,只是对其 预处理/输入/结果进一步控制而已
     # (2) 装饰器不能修改被装饰的函数的调用方式
        endTime = time.time()
        msecs = (endTime - startTime)*1000
        print("time is %d ms" %msecs)
    return wrapper

@deco
def func():
    print("hello")
    time.sleep(1)
    print("world")

if __name__ == '__main__':
    f = func #这里f被赋值为func,执行f()就是执行func()
    f()

如上例的deco就是一个基本的装饰器,注意--多个装饰器装饰一个函数,其执行顺序是从下往上。


偏函数

使用偏函数需要导入functools 模块
import functools import partial as pto

使用偏函数可以通过有效地“冻结”那些预先确定的参数,来缓存函数参数,然后在运行时,当获得需要的剩余参数后,可以将他们解冻,传递到最终的参数中,从而使用最终确定的所有参数去调用函数。

import functools import partial as pto

def add(a,b):
      return a+b;

puls = pto(add,100)
result = puls(9)

在这里偏函数表达的意思就是,在函数add的调用时,我们已经知道了其中的一个参数,我们可以通过这个参数,重新绑定一个函数,就是pto(add,100),然后去调用即可。

对于有很多可调用对象,并且许多调用都反复使用相同参数的情况,使用偏函数比较合适。

相关文章

  • 高阶python 函数式编程

    高阶python 函数式编程 - 函数式 函数式编程(FunctionalProgramming) - 基于lam...

  • Python函数式编程

    虽然 Python 不是函数式编程语言(是命令式编程语言),但是支持许多有价值的函数式编程工具。Python 提供...

  • Python函数式编程指南

    注:采转归档,自己学习查询使用 Python函数式编程指南(1):概述Python函数式编程指南(2):函数Pyt...

  • Python进阶语法——函数式编程、模块,面向对象

    一、 Python进阶学习 一、函数式编程 1.1函数式编程 1.2高阶函数 1.2.1 import mathd...

  • Python高阶函数

    本篇将介绍Python的函数式编程,介绍高阶函数的原理,更多内容请参考:Python学习指南 函数式编程 函数是P...

  • Python进阶笔记

    文|Seraph 函数式编程 1 纯函数式编程:不需要变量、没有副作用、测试简单2 Python不是纯函数式编程(...

  • python函数式编程

    函数式编程指引 — Python 3.7.3 文档

  • Python 中的函数式编程 - PyTips 0x02

    项目地址:https://git.io/pytips Python 中的函数式编程 函数式编程(英语:functi...

  • python必知必会7

    Python 支持函数式编程吗? 近些年来,由于函数式编程易于调试和测试的优点,函数式编程越来越受到关注。虽然 P...

  • 向量化

    python向量化本身做得不是很好需要借助函数式编程或者列表推导式实现 1 列表推导式 2 函数式编程

网友评论

      本文标题:python函数式编程

      本文链接:https://www.haomeiwen.com/subject/mtpcaftx.html