python 学习笔记---匿名函数 装饰器 偏函数

      
                 6:匿名函数
                    Python中 对于匿名函数提供了有限的支持
                         >>>map(lambda x:x*x,[1,2,3,4,5,6,7,8,9])
                        [1,4,9,16,25,36,49,64,81]
                    可以看出 lambda其实就相当于:
                         >>>def f(x):
                                    return x*x
                    关键字lambda表示匿名函数 冒号前面的表示 函数参数 
                     注意 Python中匿名函数有一个限制 那就是只能有一个表达式 返回值就是表达式的结果

                7:装饰器
                        >>>def now():
                                    print '2013-12-25'
                        >>>f=now
                        >>>f()
                        2013-12-25
                        >>>now.__name__
                        'now'
                        >>>f._name_
                        'now' 
                    _name_ 函数的属性 可以得到函数的名称
                    如果我们希望now()函数在调用的前后自动打印日志 但是有不改动now()函数的定义,这种在代码运行期间动态增加功能的方式,称之为 装饰器(decorator).本质上装饰器就是返回函数的高阶函数
                        >>>def log(func):
                                    def wrapper(*args,**kw):
                                        print 'call %s():' %func.__name__
                                        return func(*args,**kw)
                                    return wrapper
                    以上就是一个装饰器  接受了一个函数作为参数 并返回一个函数
                        >>>@log
                        >>>def now():
                                    print '2013-12-25'
                        >>>now()
                        call now():
                        2013-12-25
                    把@log 放到now()函数的定义处 相当于执行了语句  now =log(now)  执行流程是: 首先 now=log(now)  于是 now 指向返回的wrapper 接受到了参数 打印call 然后now 有指向了返回的func也就是原函数。这样就实现了整个装饰器的功能。
                        >>>def log(text):
                                    def decorator(func):
                                        def wrapper(*args,**kw):
                                            print '%s %s():' %(text,func.__name__)
                                            return func(*args,**kw)
                                        return wrapper
                                    return decorator
                        >>>@log('execute')
                                def now():
                                    print 'hello'
                        >>>now()
                        execute now():
                        hello
                    @log('execute') 相当于now =log('execute')(now)  分析流程同上
                        >>>now.__name__
                        wrapper
                    上述两种装饰器 还差最后一步,因为 经过装饰之后的函数 ___name__已经从now变为了wrapper。因为返回的那个wrapper()函数的名字就是wrapper.完整的如下:
                        >>>import functools
                        >>>def log(func):
                                    @functools.wraps(func)
                                    def wrapper(*args,**kw):
                                            print 'call %s()' %func.__name__
                                            return func(*args,**kw)
                                    return wrapper
                    或者如下
                        >>>import functools
                        >>>def log(text)
                                    def decorator(func):
                                        @functools.wraps(func)
                                        def wrapper(*args,**kw):
                                            print  '%s %s():' %(text,func.__name__)
                                            return func(*args,**kw)
                                        return wrapper
                                    return decorator
                    ...
                        >>>inport functools
                        >>>def log(func):
                                    @functools.wraps(func)
                                    def wrapper(*args,**kw):
                                        print 'begin'
                                        result= func(*args,**kw)
                                        print 'end'
                                    return wrapper
                        >>>@log
                        >>>def now():
                                    print 'hello'
                        >>>now()
                        begin
                        hello
                        end
                    ............ do not understant

                8: 偏函数:(相当于把一个函数的默认的参数改变成另一个默认值 形成一个新的函数)
                        >>>def int2(x,base=2):
                                    return int(x,base)
                        >>>int2('1000000')
                        64
                    偏函数的作用就相当于上述定义的哪一个函数      
                        >>>import functools
                        >>>int2=functools.partial(int,base=2)
                        >>>int2('1000000')
                        64
                    functools.partial 的作用就是把一个函数的某些参数固定住  返回一个新的函数        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值