python之路--day10-闭包函数

时间:2021-07-18 22:42:13

1.命名关键字参数

  格式:在*后面的参数都是命名关键字参数

  特点:

    1.必须被传值

    2.约束函数的调用者必须按照key=value的形式传值

    3.约束函数的调用者必须用我们指定的key名

 1 def auth(*args,**kwargs):
 2     """
 3     使用方式auth(name="egon",pwd="123")
 4     :param args:
 5     :param kwargs:
 6     :return:
 7     """
 8     # print(args,kwargs)
 9     if len(args) !=0:
10         print('必须用关键字的形式传参')
11         return
12     if 'name' not in kwargs:
13         print('必须用指定的key名name')
14         return
15     if 'pwd' not in kwargs:
16         print('必须用指定的key名pwd')
17         return
18 
19     name=kwargs['name']
20     pwd=kwargs['pwd']
21     print(name,pwd)

2.函数嵌套

  1.函数的嵌套调用:在函数内又调用了其他函数

  

def max(x,y):
    if x>y:
        reryrn x
    else:
        return y
def max3(x,y,z):
    res1 = max2(x,y)
    res2 = max2(rea1,z)
    return res2
print(max3(11,199,2))

  2,函数的嵌套定义:在函数内又定义了其他函数

def func1():
    print('from func1')
    def func2(): #func2=内存地址
         print('from func2')

func1()

 

def f1():
    print('f1')
    def f2():
        print('f2')
        def f3():
            print('f3')
        f3()
    f2()
f1()

'''
f1
f2
f3
'''

 

 

3.名称空间和作用域

  1.名称空间:存放名字和值绑定关系的地方

  1.2.名称空间分类: 

    1.2.1内置名称空间:存放python解释器自带的名字,在解释器启动时就生效,解释器关闭则失效

    1.2.2全局名称空间:文件级别的名字,在执行文件的时候生效,在文件结束或者在文件删除的时候失效

    1.2.3局部名称空间:存放函数内定义的名字(函数的参数以及函数内名字都存放在局部变量空间)---在函数调用时临时生效,函数结束则失效

      加载顺序:内置名称空间-----全局名称空间---局部名称空间

      查找名字:局部名称空间-----全局名称空间-----内置名称空间

 

  2:作用域

  1.全局变量域:包含的是内置名称空间与全局名称空间的名字

  特点:

      在任何位置都能访问到

      该范围内的名字会伴随程序整个生命周期

  2.局部作用域:包含的是局部名称空间的名字

   特点:

       只能在函数内使用

      调用函数是生效,调用结束失效

 

4,函数对象

  1,函数可以被引用

def bar():
    print'from bar')

f =bar
f()

  2,可以当作参数传入

 

def bar():
        print(’from bar‘)

def wrapper(func):
        func()
wrapper(bar)

  3,可以当作函数的返回值

def bar():
    print(’from bar‘)
def foo(func):
    return func

f = foo(bar)
f()

  4,可以当作容器类型的元素

def get():
     print('from get')

def put():
     print('from put')

l=[get,put]

print(l)

l[0]()
def auth():
    print('登陆。。。。。')

def reigster():
    print('注册。。。。。')

def search():
    print('查看。。。。')

def transfer():
    print('转账。。。。')

def pay():
    print('支付。。。。')

dic={
    '1':auth,
    '2':reigster,
    '3':search,
    '4':transfer,
    '5':pay
}

def interactive():
    while True:
        print("""
        1 认证
        2 注册
        3 查看
        4 转账
        5 支付
        """)
        choice=input('>>: ').strip()
        if choice in dic:
            dic[choice]()
        else:
            print('非法操作')


interactive()

 

5,闭包函数

  定义在函数内部的函数,并且该函数包含对外部函数作用域中名字的引用,该函数就成为闭包函数

 def outter():
     name='egon'
     def inner():
         print('my name is %s' %name)

     return inner

inner()被称为闭包函数。
inner()定义在函数outter外部,outter函数的作用域内部变量name,在inner内被引用