• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
敬YES
Now Or Never
博客园    首页       联系   管理    订阅  订阅
python【6】-函数式编程

一、高阶函数 map,reduce

1.map()

函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

def f(x):
    return x*x

print map(f,range(1,5))

运行结果: [1, 4, 9, 16]

 

2. reduce

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

例如求1-100之和

def f(x,y):
    return x+y

print reduce(f,range(1,5))

运行结果:10

 

3.sorted排序

sorted()函数也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序。

l=[34,25,1,3,50]
print sorted(l)

#运行结果:[1, 3, 25, 34, 50]

 

def reverse(x,y):
    if(x>y):
        return -1
    elif (x<y):
        return 1
    else :
        return 0

print sorted(l,reverse)

#运行结果:[50, 34, 25, 3, 1]

 

4.函数作为返回值

def f(*args):
  def sub():
    sum = 0
    for x in args:
      sum = sum + x
    return sum
  return sub
d=f(1,2,3,4,5,6,7)
print d()

#运行结果:28

 

把函数作为参数传入,或者把函数作为返回值返回,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。

二、匿名函数

关键字lambda表示匿名函数,冒号前面的x表示函数参数。匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

print map(lambda x:x*x,range(1,6))

#运行结果:[1, 4, 9, 16, 25]

 

三、装饰器

在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。

import functools

#定义装饰器
def log(f):
    @functools.wraps(f)
    def wrapper(*args,**kw):
        print "call %s"%(f.__name__)
        f(*args,**kw)
    return wrapper

 

因为它是一个decorator,所以接受一个函数作为参数,并返回一个函数。我们要借助Python的@语法,把decorator置于函数的定义处

#使用装饰器
@log
def getNow():
    print '2016-05-26'

#调用
getNow()

#运行结果:2016-05-26

 

 

四、偏函数

functools.partial的作用就是,把一个函数的某些参数(不管有没有默认值)给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。

import functools
def func(a,b=1,c=2):
return a+b+c

func2=functools.partial(func,b=2)
func3=functools.partial(func,c=3)

print func2(5)#运行结果9
print func3(1,4)#运行结果8

 如需转载,请标明原文链接:http://www.cnblogs.com/janes/

作者:陈敬(公众号:敬YES)
出处:http://www.cnblogs.com/janes/
博客文章仅供交流学习,请勿用于商业用途。如需转载,请务必注明出处。

posted on 2016-05-26 15:06  敬YES  阅读(528)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3