Discuss / Python / 来点干货,看懂此代码的作用就明白了.

来点干货,看懂此代码的作用就明白了.

Topic source

loveprruy

#1 Created at ... [Delete] [Delete and Lock User]

简单的计时测试程序

import datetime

def timing(func):
    def wrapper():
        start_time = datetime.datetime.now()
        print start_time
        func()
        end_time =  datetime.datetime.now()
        print end_time
        print "time used: {}".format(end_time - start_time)
    return wrapper

@timing
def loop():
    print "Loop start..."
    for i in xrange(100000000):
        pass
    print "loop finished."


if __name__ == "__main__":
    loop()

loveprruy

#2 Created at ... [Delete] [Delete and Lock User]

装饰带参数的函数

import datetime


def logger(func):
    def wrapper(*args, **kvargs):
        start_time = datetime.datetime.now()
        func(*args, **kvargs)
        end_time =  datetime.datetime.now()
        print("Func {} called. Arguments: {}, {}. Time used: {}".format(
            func.__name__,
            args, 
            kvargs,
            end_time - start_time
        ))
    return wrapper

@logger
def sum(a, b):
    print(a + b)


if __name__ == "__main__":
    sum(1, 2)

loveprruy

#3 Created at ... [Delete] [Delete and Lock User]

带参数的装饰器

import datetime
import logging

logging.basicConfig(
    level=logging.DEBUG,
    format='%(levelname)-8s %(message)s',
    datefmt='%m-%d %H:%M',
    filename='myapp.log',
    filemode='a'
)

logger = logging.getLogger(__name__)


def logTest(level, *args, **kvargs):
    def wrapper(func):
        log = getattr(logger, level, "info")
        log(
            "Func {} called at {}. Other infos: {}, {}".format(
                func.__name__,
                datetime.datetime.now(),
                args,
                kvargs
            )
        )
        return func
    return wrapper


@logTest('debug', 'ttwshell.com')
def test():
    print("OK")


if __name__ == "__main__":
    test()

loveprruy

#4 Created at ... [Delete] [Delete and Lock User]

带参数的装饰器修饰 + 带参数的函数

import datetime
import logging

logging.basicConfig(
    level=logging.DEBUG,
    format='%(levelname)-8s %(message)s',
    datefmt='%m-%d %H:%M',
    filename='myapp.log',
    filemode='a'
)

logger = logging.getLogger(__name__)


def logTest(level, *args, **kvargs):
    def wrapper(func):
        def inner(*args, **kvargs):
            log = getattr(logger, level, "info")
            log(
                "Func {} called at {}. Other infos: {}, {}".format(
                    func.__name__,
                    datetime.datetime.now(),
                    args,
                    kvargs
                )
            )
            return func(*args, **kvargs)
        return inner
    return wrapper


@logTest('debug', 'liaoxuefeng.com')
def sum(a, b):
    return a + b


if __name__ == "__main__":
    print(sum(100, 88))

  • 1

Reply