函数—day02:
1、函数的嵌套调用,在函数内又调用了其他函数;
1 def foo(): 2 print(‘my name is kermit!‘) 3 4 def goo(): 5 res = foo() 6 print(‘my name is jack‘) 7 8 goo()
2、函数的嵌套定义,在函数内又定义了其他函数;
1 def func(): 2 print(‘my name is kermit‘) 3 x = 1 4 def func2(): 5 print(‘my love‘) 6 y = 2 7 func2() 8 func()
1 def f1(): 2 print(‘f1...‘) 3 def f2(): 4 print(‘f2...‘) 5 def f3(): 6 print(‘f3...‘) 7 f3() 8 f2() 9 f1()
3、一:名称空间:存放名字与绑定关系的地方
1 kermit = 123 2 def kermit(): 3 pass
二:名称空间分为三类:
1.内置名称空间:存放在python解释器自带的名字,在解释器启动时生效,关闭时终断;
2.全局名称空间:文件级别得名字,在文件执行时生效,文件结束时失效;
1 x = 1 2 def f1(): 3 def f2(): 4 print(x) 5 f2() 6 f1()
3.局部名称空间:放在函数内定义的名字(函数的参数以及函数的名字都存放于局部名称空间),
在函数被调用的时候生效,函数结束后失效;
1 def func(x): 2 y = 2 3 4 func(1)
加载顺序:内置名称空间==》全局名称空间==》局部名称空间
查找名字:局部名称空间==》全局名称空间==》内置名称空间
1 len =‘kermit‘ 2 def f1(): 3 # len = 100 4 def f2(): 5 # len=3 6 def f3(): 7 print(len) 8 f3() 9 f2() 10 f1()
三:作用域
全局作用域:包含的是内置名称空间与全局名称空间的名字,
特点
1在任何位置都能够访问的到
2该范围内的名字会伴随程序整个生命周期
局部作用域:包含的是局部名称空间的名字
特点:
1、只能在函数内使用
2、调用函数时生效,调用结束失效
函数对象:函数对象在python中是第一类对象:
1、可以被调用:
1 x = 1 2 y = x 3 def bar(): 4 print(‘kermit jam‘) 5 6 f = bar 7 f()
2、可以当作参数:
1 x = 1 2 def func(a): 3 print(a) 4 func(x) 5 6 def bar(): 7 print(‘my name is kermit‘) 8 def wrapper(func): 9 func() 10 11 wrapper(bar)
3、可以当作函数中的返回值
1 def bar(): 2 print(‘from bar‘) 3 4 def foo(func): 5 return func 6 7 f = foo(bar) 8 f()
4、可以当作容器中的元素
1 def get(): 2 print(‘from get‘) 3 4 def put(): 5 print(‘from put‘) 6 7 l = [get,put] 8 l[0]() 9 l[1]()
1 def login(): 2 print(‘login....‘) 3 4 def regist(): 5 print(‘regist...‘) 6 7 def check(): 8 print(‘check....‘) 9 10 def pay(): 11 print(‘pay......‘) 12 13 dic = { 14 ‘1‘:login, 15 ‘2‘:regist, 16 ‘3‘:check, 17 ‘4‘:pay, 18 } 19 20 def interactive(): 21 while True: 22 print(‘‘‘‘ 23 1 登陆 24 2 注册 25 3 查看 26 4 支付 27 28 ‘‘‘) 29 choise = input(‘choise:>>:‘).strip() 30 if choise in dic: 31 dic[choise]() 32 33 else: 34 print(‘输入非法!‘) 35 36 interactive()
5、闭包函数:
闭:指函数定义在函数内部的函数
作用域关系:在函数定义阶段就规定死了,与调用的位置无关
1 def outter(): 2 x = 1 3 def inner(): 4 print(‘kermit jam‘,x) 5 inner() 6 x=1111 7 a = outter 8 a()
闭包函数:
1、定义在函数内部的函数
2、并且该函数包含对外部函数的引用,该函数就叫做闭包函数
1 def outter(): 2 name = ‘kermit‘ 3 def inner(): 4 print(‘my name is %s‘ %name) 5 return inner 6 7 f = outter() 8 f()