python 基础学习

139 阅读1分钟

1、装饰器

直接上代码

###装饰器 日志log

def log(func):
    def wrapper(*args, **kw):
        print('call %s():' % func.__name__)
        return func(*args, **kw)
    return wrapper


## 相当于now = log(now)
@log
def now():
    print('2015-3-25')```
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import functools

def log(func):
    @functools.wraps(func)
    def wrapper(*args, **kw):
        print('call %s():' % func.__name__)
        return func(*args, **kw)
    return wrapper

@log
def now():
    print('2015-3-25')

now()

def logger(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

@logger('DEBUG')
def today():
    print('2015-3-25')

today()
print(today.__name__)

now()

#  now = log('execute')(now)
def log_pass(text):
    def decorator(func):
        def wrapper(*args, **kw):
            print('%s %s():' % (text, func.__name__))
            return func(*args, **kw)
        return wrapper
    return decorator

@log_pass('日志')
def now_pass():
    print('2022-02-2')

now_pass()

1.1 完整练习日志实例

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import functools

def logger(func):
    @functools.wraps(func)
    def wrapper(*args, **kw):
        print('call %s():' % func.__name__)
        return func(*args, **kw)
    return wrapper

def logger(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

@log
def now():
    print('2015-3-25')

now()

@logger('DEBUG')
def today():
    print('2015-3-25')

today()
print(today.__name__)

1.2 这样写感觉更好

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import functools


# def log(func):
#     @functools.wraps(func)
#     def wrapper(*args, **kw):
#         print('call %s():' % func.__name__)
#         return func(*args, **kw)
#     return wrapper

def logger(*text):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print('%s %s():' % (list(text), func.__name__))
            return func(*args, **kw)

        return wrapper

    return decorator


@logger()
def now():
    print('2015-3-25')


now()


@logger('DEBUG')
def today():
    print('2015-3-25')


today()
print(today.__name__)