• 函数


    一.  local()与globals()

    a=0        #全局变量
    def func():
        a=1        #局部变量
        b=2         #局部变量
        print(locals())       #打印所有局部变量
        print(globals())     #打印所有全局变量
        print(a+b)
    func()

             查看一个函数的函数名:

    def func():
        print('今天五一')
    
    print(func.__name__)          #func  打印一个函数的函数名

    二 .   闭包

        一个内层函数中,引用了外层函数(非全局)的变量,这个内层函数就可以成为闭包。

        在Python中,我们可以使用__closure__来检测函数是否是闭包。

    def a():
        a=1
        def b():
            print(a)
        print(b.__closure__)       
        return b()
    a()
    
    
    
    
    #1
    
    #(<cell at 0x00000244561C95B8: int object at 0x000000005DB16C10>,)

    三.装饰器

    def create_prople():
        print('女娲造人')
    
    def a(f):
        def b():
            f()
            print('后羿射日')
        return b
    create_people=a(create_prople)
    create_people()

       语法糖:(不带返回值)

    def a(f):              #装饰函数
        def b():
            f()
            print('后羿射日')
        return b
    @a                    #装饰器语法糖( 相当于 #create_ people=a(create_people)  )
    def create_prople():    #被装饰函数
        print('女娲造人')
    
    create_prople()

      装饰器返回带返回值的函数

    def a(f):               
        def b():
            print('后羿射日')
            r=f()
            return r
        return b
    @a                 #create_ people=a(create_people)
    def create_prople():
        return('女娲造人')
    
    ret=create_prople()
    print(ret)

        装饰器返回带参数的函数

    def a(f):
        def b(*args,**kwargs):         #*args 任意多个参数  **kwargs 任意多个关键字参数
            print('后羿射日')
            r=f(*args,**kwargs)
            return r
        return b
    @a
    def create_prople(x,y):
        return('女娲造人',x,y)
    @a
    def func(x):
        return('大帅逼',x)
    ret=create_prople(1,2)
    print(ret)
    rep=func(3)
    print(rep)

       在一个有装饰器的函数中如何查看函数的函数名?

    def a(f):
        def b(*args,**kwargs):         #*args 任意多个参数  **kwargs 任意多个关键字参数
            print('后羿射日')
            r=f(*args,**kwargs)
            return r
        return b
    @a         #create_prople=a(create_prople)
    def create_prople(x,y):
        return('女娲造人',x,y)
    
    print(create_prople.__name__)         # b  (本应该输出create_people)

    from functools import wraps         #导入wraps函数
    def a(f):
        @wraps(f)                       #引用wraps
        def b(*args,**kwargs):         #*args 任意多个参数  **kwargs 任意多个关键字参数
            print('后羿射日')
            r=f(*args,**kwargs)
            return r
        return b
    @a         #create_prople=a(create_prople)
    def create_prople(x,y):
        return('女娲造人',x,y)
    
    print(create_prople.__name__)         # 输出create_people
    
    

       装饰器传参数

    # 装饰器带参数
    FALL=True
    def count(c):
        def a(f):
            def b(*args,**kwargs): #*args 任意多个参数  **kwargs 任意多个关键字参数
                if c:
                    print('后羿射日')
                    r=f(*args,**kwargs)
                    return r
                else:
                    r = f(*args, **kwargs)
                    return r
            return b
        return a
    #create_people=count(FALL)
    @count(FALL)          # 相当于把@与count(FALL)分开,先执行count(FALL) 在执行@
    def create_prople(x,y):
        return('女娲造人',x,y)
    
    @count(FALL)
    def zuiri():
        return ('夸父追日')
     

       多个装饰器修饰一个函数(函数先执行离它最近的装饰器)

    #先执行@a2   在执行@a1
    def
    a1(f): def b(): print('aaaa') f() print('1111') return b def a2(f): def b1(): print('bbbb') f() print('2222') return b1 @a1 @a2 def f(): print('大帅逼 ') f() #bbbb #aaaa #大帅逼 #1111 #2222
  • 相关阅读:
    轮播制作
    前端问题总结
    响应式 媒体查询 盒模型
    响应式 字体设置 flex 弹性布局
    C++ STL之set常用指令
    SRM468
    SRM470
    置换及其应用专题
    C++ STL之map常用指令
    C++ STL之pair常用指令
  • 原文地址:https://www.cnblogs.com/wm0217/p/10798097.html
Copyright © 2020-2023  润新知