装饰器及pycharm模板

2018-02-05  本文已影响0人  全宇宙最帅De男人

[TOC]

先导知识

1.作用域
L-E-G-B范围查找
2.高阶函数

函数名作为参数输入
函数名作为返回值

3.闭包
如果一个内部函数里,对外部环境的变量进行引用,那么这个内部函数就是一个闭包
闭包=内部函数+定义函数时的环境

装饰器(开放封闭原则)

    @dec
    def func():
        pass

1.装饰器函数

    import time
    
    def show_time(func):
        def wrapper():
            start_time=time.time()
            func()
            end_time=time.time()
            print('spend %s'%(end_time-start_time))
        return wrapper
    
    @show_time
    def foo():
        print('hello foo')
        time.sleep(2)
    
    #foo=show_time(foo)
    foo()

show_time函数就是一个装饰器函数,它为原始函数foo添加了一个运行时间的功能
在原始函数上方用@show_time来代替foo=show_time(foo)

2.装饰器参数
在装饰器函数外包上一层函数并传入参数,让装饰器函数使用外层函数的参数形成闭包,根据参数决定是否使用功能。

    import time
    def logger(falg=''):
        def show_time(f):
            --snip--
        if flag=='true':
            print('11111111')
        return show_time
    @logger('true')
    def foo():
        --snip--
    @logger()
    def add():
        --snip--

这样利用装饰器参数,就可以让所有函数都执行show_time,而只有传参数‘true’的函数才能打印1111111



pycharm新建模板添加作者时间等信息

1.file--->settings
2.Editor--->Color&Style--->File and Templates---->Python---->Script
3.添加

    ##!/usr/bin/python3
    # -*- coding: utf-8 -*-
    # @TIME     : ${DATE} ${TIME}
    # @Author   : kaiser
    # ....
上一篇下一篇

猜你喜欢

热点阅读