码迷,mamicode.com
首页 > 编程语言 > 详细

python学习笔记(1)

时间:2016-02-06 18:26:21      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

之前草草看了一遍,感觉很容易忘,果然还是要记点笔记。

这次目标是:python+web编程 

 

[装饰器]

函数也是一个对象,可以赋值给变量:

def now():
    print(hello)

f=now()
f() #调用now()
print(f.__name__) #获得now()中__name__

现在要增强now()功能,但又不改原来now()代码,这种在代码运行期间动态增加功能的方式,称作装饰器(decorator). 

本质上,装饰器是一个返回函数的函数,返回的的函数中封装了新功能与原有函数:

#给now添加功能:调用前打印__name__
def log(func):
    def wrapper(*args, **kw):
        print(%s %func.__name__)
        return func(*args, **kw)
    return wrapper

@log  #装饰器语法
def now():
    print(hello)

使用@log就能把log装饰器功能增加到now上面,这时调用now(),会在之前打印__name__

相当于执行了  now=log(now) 

如果增加的功能中需要传入参数,要返回decorator的高阶函数:

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(someText)
def now():
    print(hello)

相当于执行了now=log(‘someText‘)(now)

现在还有一个问题,now是增加了功能,但因为返回的是wrapper函数,此时now.__name__是wrapper,要解决这个问题,需要用functools.wraps:

import functools
def log(func):
    @functools.wraps(func)
    def wrapper(*args, **kw):
        print(func.__name__)
        return func(*args, **kw) 
    return wrapper

#或者带参数的
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

 

以上内容摘自:http://www.liaoxuefeng.com/ 

其实就是大概敲了一遍... 不过起码仔细了一些... 

 

python学习笔记(1)

标签:

原文地址:http://www.cnblogs.com/IvanSSSS/p/5184189.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!