zoukankan      html  css  js  c++  java
  • 函数和装饰器

    1、名称空间,作用域,取值顺序等

    名称空间:当执行函数的时候,他会在内存中开辟一个临时名称空间,存放函数体内的所有变量与值的关系,随着函数的执行完毕,临时空间自动关闭。
    作用域:是程序在执行过程中变量与值得起作用范围
    取值顺序:对于变量和值最先起作用是函数内,然后是全局,最后是内置

    2、函数的嵌套

    在程序执行中,开始只会把函数名放到内存中 ,函数在调用的时候才执行。

    代码从上至下依次执行, 调用函数:函数里面从上至下依次执行。

    3、内置函数global(),nonlocal()

    print(globals())  # 全局名称空间:所有变量
    print(locals())  # 局部名称空间:所有变量
    a = 2
    b = 3
    def func1():
        c = 5
        d = 6
        print(globals())  # 全局变量放在一个字典中
        return locals()  # {'c': 5, 'd': 6}
    print(func1())

    4、关键字global,nonlocal

    global:在局部空间内改变一个全局变量

    nonlocal:在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变。

    5、函数名的应用

    函数名是函数的名字,本质:变量,特殊的变量。

    5.1、单独打印函数名

    def func1():
        print(666)
    print(func1)  # <function func1 at 0x0000000000872378>
    a = 6
    print(a)

    5.2、函数名的赋值

    def func2():
        print(666)
    
    f = func2
    print(f())

    5.3、函数名可以作为容器类数据的元素

    l1 = []
    for i in range(1,5):
        l1.append('f'+str(i))
    print(l1)

    5.4函数名可以作为参数

    a = 1
    def f1(x):
        print(x)
    f1(a)

    5.5、函数名可以作为函数的返回值。

    def wraaper():
        def inner():
            print(666)
        inner()
    wraaper()

     

    6、闭包

    闭包:就是内层函数对外层函数(非全局)变量的引用。
    如何判断  内层函数名.__closure__  cell 就是=闭包
    name = '老男孩'
    def wraaper2(n):
        #  n = '老男孩' 相当于
        def inner():
            print(n)
        inner()
        print(inner.__clo

    7、装饰器初识

    7.1测是一个函数执行时间(直接加函数中)

     def func1():
         print('你有病呀,领导,测试我的执行效率干甚。')
    
     print(time.time())  # 时间戳
     start_time = time.time()
     func1()
     time.sleep(0.3)
     end_time = time.time()
     print('此函数的执行效率%s' % (end_time - start_time))

    7.2测是一个函数执行时间(写成函数)

    def func1():
        print('你有病呀,领导,测试我的执行效率干甚。')
    
    def func2():
        print('你有病呀,领导2,测试我的执行效率干甚。')
    func1()
    
    def func1():
        print('你有病呀,领导,测试我的执行效率干甚。')
    func1()
    def timmer(f):
        start_time = time.time()
        f()
        time.sleep(0.3)
        end_time = time.time()
        print('此函数的执行效率%s' % (end_time - start_time))

    7.3测是一个函数执行时间(使用装饰器)

    f1 = func1  # f1 = func1
    func1 = timmer  # 新变量func1 = timmer
    func1(f1)
    
    
    def func2():
        print('你有病呀,领导,测试我的执行效率干甚。')
    def timmer(f):  # f = func1
        def inner():
            start_time = time.time()
            f()  #  func1()
            time.sleep(0.3)
            end_time = time.time()
            print('此函数的执行效率%s' % (end_time - start_time))
        return inner
    # 语法糖@
    
    @timmer  # func1 = timmer(func1)
    def func1():
        print('你有病呀,领导,测试我的执行效率干甚。')
    
    func1 = timmer(func1)  # inner
    func1()  # inner()

    7.4测是一个函数执行时间(优化装饰器)

    def timmer(f):  # f = func1 函数名
        def inner(*args,**kwargs):
            start_time = time.time()
            f(*args,**kwargs)
            time.sleep(0.3)
            end_time = time.time()
            print('此函数的执行效率%s' % (end_time - start_time))
        return inner
    
    @timmer # func1 = timmer(func1) # inner
    def func1(a,b):
        print(a,b)
        print('你有病呀,领导,测试我的执行效率干甚。')
    
    @timmer
    def func2(a,b,c,d):
        print(a,b,c,d)
        print('你有病呀,领导,测试我的执行效率干甚。')
    
    func1(1,2)  # inner()
    func2(2,3,4,5)
    def timmer(f):  # f = func1 函数名
        def inner(*args,**kwargs):
            start_time = time.time()
            ret = f(*args,**kwargs)
            time.sleep(0.3)
            end_time = time.time()
            print('此函数的执行效率%s' % (end_time - start_time))
            return ret
        return inner
    
    
    @timmer # func1 = timmer(func1) # inner
    def func1(a,b):
        print(a,b)
        print('你有病呀,领导,测试我的执行效率干甚。')
        return 666
    
    print('************',func1(1,2))
  • 相关阅读:
    如何快速方便的输出向量vector容器中不重复的内容
    System.IO.FileInfo.cs
    System.IO.FileSystemInfo.cs
    System.IO.FileAttributes.cs
    System.IO.StreamWriter.cs
    System.IO.TextWriter.cs
    System.IO.StreamReader.cs
    System.IO.FileStream.cs
    System.IO.FileOptions.cs
    System.IO.FileShare.cs
  • 原文地址:https://www.cnblogs.com/huihuangyan/p/9119890.html
Copyright © 2011-2022 走看看