Python2.x_函数式编程

变量可以指向函数,函数名也是变量

一 高阶函数:参数包含函数

def add(a, b, f):

    print f(a)+f(b)

add(-3, 4, abs)

二 map函数:map(function, sequence, ...)

print map(lambda x:x*x, [0, 1, 2, 3, 4])  # [0, 1, 4, 9, 16]

三 reduce函数

reduce(function, sequence, initial), function必须只接受2个参数

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

def char2num(s): 

    return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]

def str2num(s):

    return reduce(lambda x,y:10*x+y, map(char2num, s))

print str2num('232891739')+1

四 filter函数

filter(function, sequence), function必须返回bool值

若function返回True则保留,返回False则过滤

def biggerthan5(x):

    return x>5

print filter(biggerthan5, [1,3,5,7,9])

五 sorted函数

sorted(iterable, cmp=None, key=None, reverse=False)

reverse=False, 当cmp返回正数时,将左数移到右数右边

def sortCriterion1(x,y):#从小到大 ,less

    if x>y:

        return 1

    elif x<y:

        return -1

    return 0

def sortCriterion2(x,y):#从大到小 ,greater

    if x>y:

        return -1

    elif x<y:

        return 1

    return 0

print u'从小到大:',sorted([1,3,2], sortCriterion1)

print u'从大到小:',sorted([1,3,2], sortCriterion2)

六 闭包函数:返回值为函数

def name(s):

    def score(n):

        print s,'your score is',n

    return score

n = name('Yoleimei')

n(100)

七 匿名函数lambda

lambda x,y: x*x+y*y == function(x,y){return x*x+y*y;} # in javascript

注:lambda表达式可嵌套,如 lambda fun1,fun2: lambda param: fun1(fun2(param))

def build(x, y):

    return lambda: x * x + y * y

f = build(3,5)

print f()

八 装饰器Decorator:可以类比Decorator Design Pattern

def deco(fun):

    print 'before calling fun()'

    fun()

    print 'after calling fun()'

    return fun

@deco

def myFun():

    print 'calling fun()'

# console:

# before calling fun()

# calling fun()

# after calling fun()

九 偏函数:使部分参数默认化

import functools

def add(x, y):

    return x+y

myAdd = functools.partial(add, x=3, y=4)

print myAdd()

转载于:https://www.cnblogs.com/yoleimei/p/4622676.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值