python学习笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习笔记相关的知识,希望对你有一定的参考价值。

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

这次目标是: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学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

安全牛学习笔记python装饰器

Python 3 学习笔记----装饰器

python学习笔记7:装饰器

python学习笔记:装饰器2

Python学习笔记6-python函数补充装饰器模块

Python学习笔记__4.4章 装饰器(添加额外功能)