1、map() : python内置的高阶函数,接收一个函数f和一个list,并通过把函数f依次作用在list的每个元素上,得到一个新的list并            返回。

 def f(x):
return x * x
print map(f , [ 1 , 2 , 3 , 4 ]) 输出----> [1,4,9,16]

注:map()并不改变原有的list,而是返回一个新的list

2、reduce() :内置高阶函数,接收一个函数f和一个list。f必须接收两个参数,reduc()对list的每个元素反复调用f,并返回最               终结果值。

def f(x,y):
reeturn x+y
reduce(f,[1,3,5]) 运行----> f(1,3) = 4
f(4,5) = 9 将上面使用 f 执行的到的结果作为这个 f 的第一个参数
计算结果返回 9

reduce()可接收第三个可选参数,作为计算的初始值。

  reduce(f,[1,3,5],100)    那么运算结果就是109

3、filter() : 内置高阶函数,作用类似于过滤。接收f和list,f的作用是对每一个元素进行判断,返回True和False。filter()                根据判断结果自动过滤掉不符合条件的元素(False),返回由符合条件元素组成的新list。

# 筛选奇数
def is_add(x):
return x % 2 == 1
filter( is_add , [1,4,6,7,9,12,17] ) 运行-----> [1,7,9,17]
#删除None或空字符串
def is_not_emptty(s):
return s and len(s.strip()) > 0
filter(is_not_empty , ['test' , None, '' , 'str', ' ','END']) 运行-----> ['test','str','END']

4、sorted() 可对list进行排序

      >>>sorted([36,5,12,9,21])

      [5,9,12,21,36]

      sorted也是一个高阶函数,接收一个比较函数实现自定义排序。

      比较函数的定义:

          传入两个待比较的元素x,y

          如果x应排在y前面,返回-1

          如果x应排在y后面,返回1

          如果x等于y,返回0

#实现倒序排序
def reversed_cmp(x,y):
if x > y:
return -1
if x < y:
return 1
return 0 sorted([36,5,12,9,21] , reversed_cmp) 运行------> [36,21,12,9,5]

5、Python返回函数

 

#返回函数和返回函数值的区别
def f():
print 'call f()...'
def g():
print 'call g()...'
return g #这儿返回的是指向g()这个函数的变量g
#如果是 return g() 那么是返回g()这个函数计算的返回值
>>> x = f()
call f()...
>>> x
<function g at 0x10376f320>
>>>x()
call g()...
#延迟计算

6、Python闭包

  内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)。

闭包的特点是返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。

# 希望一次返回3个函数,分别计算1x1,2x2,3x3:
def count():
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
return fs f1, f2, f3 = count()
#实际上返回结果并不是1,4,9 而是 9,9,9,
#原因就是当count()函数返回了3个函数时,这3个函数所引用的变量 i 的值已经变成了3。由于f1、f2、f3并没有被调用,
#所以,此时他们并未计算 i*i,当 f1 被调用时:因为f1现在才计算i*i,但现在i的值已经变成3

因此,返回函数不要引用任何循环变量,或者后续会发生变化的变量。

修改上述代码使之正确返回1,4,9

def count():
fs = []
for i in range(1, 4): def f(m = i): return m * m
fs.append(f)
return fs f1, f2, f3 = count()
print f1(), f2(), f3()

7、Python 匿名函数

    

#正常函数
def addNum(a,b):
return a + b #等同的匿名函数
lam = lambda a,b:a+b
#冒号前为参数

8、装饰器@decorator

python内置的@语法就是为了简化装饰器调用

@new_fn                          def f1(x):

def f1(x):           ------->        return x * 2

  return x * 2                 f1 = new_fn(f1)

作用:

  极大地简化代码。避免每个函数编写重复代码。

  打印日志:@log

  检测性能:@preformance

  数据库事物:@transaction

  URL路由:@post('/register')

装饰器内容理解可参见 http://www.cnblogs.com/rollenholt/archive/2012/05/02/2479833.html

【python】python函数式编程、高阶函数的更多相关文章

  1. 【Python】[函数式编程]高阶函数,返回函数,装饰器,偏函数

    函数式编程高阶函数 就是把函数作为参数的函数,这种抽象的编程方式就是函数式编程.--- - -跳过,不是很理解,汗 - ---

  2. Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊

    函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...

  3. (转)Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)

    原文:https://www.cnblogs.com/chenwolong/p/reduce.html 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数 ...

  4. Python实用笔记 (12)函数式编程——高阶函数

    函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数! Python对函数式编程提供部分支持.由于Python允许使用变量,因此,Python不是纯函数式编程语言. 变量 ...

  5. python 函数式编程 高阶函数 装饰器

    # -*- coding:gb2312 -*- #coding=utf-8 # 高阶函数 import math def is_sqr(x): y = int(math.sqrt(x)) return ...

  6. C#函数式编程-高阶函数

    随笔分类 -函数式编程 C#函数式编程之标准高阶函数 2015-01-27 09:20 by y-z-f, 344 阅读, 收藏, 编辑 何为高阶函数 大家可能对这个名词并不熟悉,但是这个名词所表达的 ...

  7. [Python3] 035 函数式编程 高阶函数

    目录 函数式编程 之 高阶函数 1. 引子 2. 系统提供的高阶函数 3. functools 包提供的 reduce 4. 排序 函数式编程 之 高阶函数 把函数作为参数使用的函数,叫高阶函数 1. ...

  8. 函数式编程 高阶函数 map&reduce filter sorted

    函数式编程 纯函数:没有变量的函数 对于纯函数而言:只要输入确定,那么输出就是确定的.纯函数是没有副作用的. 函数式编程:允许把函数本身作为参数传入另一个函数,还允许返回一个函数 高阶函数:一个函数的 ...

  9. Python函数式编程-高阶函数、匿名函数、装饰器、偏函数

  10. python入门16 递归函数 高阶函数

    递归函数:函数内部调用自身.(要注意跳出条件,否则会死循环) 高阶函数:函数的参数包含函数 递归函数 #coding:utf-8 #/usr/bin/python """ ...

随机推荐

  1. 需要序列化的类中没有写serialVersionUID的解决办法

    由于没赋值serialVersionUID 只是警告,不是错误,造成先前没留意设定serialVersionUID,网络两端上线运行一段时间也感觉正常.如果再增减修改field,没赋值好serialV ...

  2. Tensorflow之基于MNIST手写识别的入门介绍

    Tensorflow是当下AI热潮下,最为受欢迎的开源框架.无论是从Github上的fork数量还是star数量,还是从支持的语音,开发资料,社区活跃度等多方面,他当之为superstar. 在前面介 ...

  3. CentOs6.7 python2.6升级到2.7.11

    1.查看当前python的版本 #python -V Python 2.6.6 2.下载Python-2.7.11 wget https://www.python.org/ftp/python/2.7 ...

  4. [转]一图读懂JVM架构解析

    每个Java开发人员都知道字节码经由JRE(Java运行时环境)执行.但他们或许不知道JRE其实是由Java虚拟机(JVM)实现,JVM分析字节码,解释并执行它.作为开发人员,了解JVM的架构是非常重 ...

  5. PAT 甲级 1011 World Cup Betting (20)(20 分)

    1011 World Cup Betting (20)(20 分)提问 With the 2010 FIFA World Cup running, football fans the world ov ...

  6. 切换了webview 定位不了的解决方法 (还没有试,记录在此)

    # 切换到 webview time.sleep(2) print(driver.contexts) driver.switch_to.context('WEBVIEW_com.tencent.mm: ...

  7. Spring4.0之四:Meta Annotation(元注解)

    Spring框架自2.0开始添加注解的支持,之后的每个版本都增加了更多的注解支持.注解为依赖注入,AOP(如事务)提供了更强大和简便的方式.这也导致你要是用一个相同的注解到许多不同的类中去.这篇文章介 ...

  8. Web jsp开发学习——点击菜单页面切换

      两个网页使用同一个head,在点击“首页”后,head的“首页”变成绿色,点击“新闻”后,head的“新闻”变成绿色,head的“首页”恢复原来的颜色   head.jsp <%@ page ...

  9. Oracle group by

    group by 简单点理解就是根据什么分组 为此 group by job   根据job进行分组 举例:在Oracle当中scott/oracle 下有emp表 进行如下操作  体会order b ...

  10. [UE4]计算AimOffset偏移动画的角度