美文网首页
装饰器及pycharm模板

装饰器及pycharm模板

作者: 全宇宙最帅De男人 | 来源:发表于2018-02-05 23:25 被阅读0次

    [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
        # ....
    

    相关文章

      网友评论

          本文标题:装饰器及pycharm模板

          本文链接:https://www.haomeiwen.com/subject/kblwzxtx.html