zoukankan      html  css  js  c++  java
  • python's twelth day for me

    闭包:

      内层函数对外层函数的变量(非全局变量)的引用。

      python 遇到闭包,有一个机制,会开辟一个空间,将闭包中的全部变量放入其中。且不会随着函数的结束而关闭。

      闭包的完美体现:装饰器。

    打印函数的注释:

    def func1():
        '''
        此函数是完成登陆的功能,参数分别是...作用。
        :return:返回值是登陆的成功与否(True,False)
        '''
        print(666)
        print(func1.__name__)    #打印函数名
        print(func1.__doc__)     #打印注释
        return True
    func1()
    
    # 666
    # func1
    # 
    # 此函数是完成登陆的功能,参数分别是...作用。
    # :return:返回值是登陆的成功与否(True, False)

    放在函数执行外也可以打印:

    def func():
        '''
        此函数是完成登陆的功能,参数分别是...作用。
        :return:返回值是登陆成功与否。(True,False)
        '''
        print(666)
        return True
    func()
    print(func.__name__)
    print(func.__doc__)
    
    # 666
    # func
    # 
    #     此函数是完成登陆的功能,参数分别是...作用。
    #     :return:返回值是登陆成功与否。(True,False)

    打印日志:

    from functools import wraps
    def wrapper(f):     # f = func1
        @wraps(f)
        def inner(*args,**kwargs):    # 聚合
            '''执行函数之前的相关操作'''
            ret = f(*args,**kwargs)    #打散 1,2,3
            '''执行函数之后的相关操作'''
            return ret
        return inner
    @wrapper     #func1 = wrapper(func1)   func1 = inner
    def func1():
        '''
        此函数是完成登录功能,参数分别是...作用。
        :return: 返回值是成功与否(True,False)
        '''
        print(666)
        return True
    func1()
    print(func1.__name__)
    print(func1.__doc__)
    
    # 666
    # func1
    #
    #     此函数是完成登录功能,参数分别是...作用。
    #     :return: 返回值是成功与否(True,False)

    多个装饰器装饰一个函数:

    def wrapper1(func):    #func == f 函数名
        def inner1():
            print('wrapper1,before func')  # 2
            func()
            print('wrapper1,after func')   # 4
        return inner1
    
    def wrapper2(func):
        def inner2():
            print('wrapper2,before func')   # 1
            func()
            print('wrapper2,after func')   # 5
        return inner2
    
    @wrapper2  # 后 # f = warpper2(f) 里面的f == inner1  外面的 f == inner2
    @wrapper1  # 先  # f = wrapper1(f) 里面的f == 函数名 f 外面的 f == inner1
    def f():
        print('in f')   # 3
    f()
    
    # wrapper2,before func
    # wrapper1,before func
    # in f
    # wrapper1,after func
    # wrapper2,after func

    多个装饰器装饰一个函数的打印顺序:

    可引用全局变量,但不能修改,用global 才能修改。

    a = 6
    def func1():
        global a
        a = a+1
        print(a)
    func1()

     用标志位,来决定是否执行装饰器:

    import time
    def timer(*args,**kwargs):
        def wrapper(f):
            def inner(*args,**kwargs):
                if flag:
                    start_time = time.time()
                    ret = f(*args,**kwargs)
                    time.sleep(0.3)
                    end_time = time.time()
                    print('此函数的执行效率%f' % (end_time-start_time))
                else:
                    ret = f(*args,**kwargs)
                return ret
            return inner
        return wrapper
    flag = True
    @timer(flag)     #两步: 1. timer(flag) --> wrappen   2. @wrapper
    def func1():
        print(666)
    @timer(flag)
    def func2():
        print(777)
    func1()
    func2()
  • 相关阅读:
    个人冲刺二(7)
    个人冲刺二(6)
    个人冲刺二(5)
    个人冲刺二(4)
    对称二叉树 · symmetric binary tree
    108 Convert Sorted Array to Binary Search Tree数组变成高度平衡的二叉树
    530.Minimum Absolute Difference in BST 二叉搜索树中的最小差的绝对值
    pp 集成工程师 mism师兄问一问
    17. Merge Two Binary Trees 融合二叉树
    270. Closest Binary Search Tree Value 二叉搜索树中,距离目标值最近的节点
  • 原文地址:https://www.cnblogs.com/stfei/p/8692418.html
Copyright © 2011-2022 走看看