python之路--day10-闭包函数
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内被引用