函数
global与nonlocal关键字使用
- x = 111
 def index():
 局部修改全局变量 需要使用关键字声明
 global x
 x = 222
 index()
 print(x)
 name_list = ['jason', 'kevin']
 def index():
 name_list.append('heiheihei')
 index()
 print(name_list)
 如果想在局部修改全局数据
 如果数据为不可变类型则需要关键字global声明
 如果数据为可变类型则无需关键字global声明
- def index():
 x = 111
 l1 = [11,22]
 def func():
 内部局部修改外部局部
 l1.append(333)
 func()
 print(l1)
 index()
 如果想要在内部的局部修改外部局部的不可变类型数据,需要关键字nonlocal声明
  
函数对象(函数名)
函数名遇到括号就会调用
- 
用法1:函数名可以当做变量名赋值 
 def index():
 print('from index')
 a = index
 a() # 本质就是在调用index函数
- 
用法2:函数名还可以当做函数的实参 
 def index():
 print('from index')
 def func(a):
 print(a)
 a()
 print('from func')
 func(index)
- 
用法3:函数名还可以当做函数返回值 
 def index():
 print('from index')
 def func():
 print('from func')
 return index
 res = func() # 调用func并接受func的返回值
 res()
- 
用法4:函数名可以当做容器类型(内部可以存放多个数据)的元素 
 def index():
 print('from index')
 l = [111, 222, 333, index()]
 print(l)
  
函数的嵌套调用
嵌套调用:函数内部调用其他函数
- 
eg: 
 def index():
 print('from index')
 def func():
 index()
 print('from func')
 func()
- 
def many_max(x,y,z,m): 
 res = my_max(x,y)
 res1 = my_max(res,z)
 res2 = my_max(res1,m)
 return res2
 ret = many_max(1,2,3,4)
 print(ret)7
  
函数的嵌套定义
函数体内部定义其他函数
将复杂的功能全部隐藏起来 暴露一个简单的接口
- def all_func(type):
 def register():
 print('注册功能')
 def login():
 print('登录功能')
 def transfer():
 print('转账功能')
 def shopping():
 print('购物功能')
 这里仅仅是延时嵌套定义的现象 暂不考虑优化
 if type == '1':
 register()
 elif type == '2':
 login()
 elif type == '3':
 transfer()
 elif type == '4':
 shopping()
 else:
 print('不知道啥功能')
 all_func('3')
  
闭包函数
闭:定义在函数内部的函数
包:内部函数使用了外部函数名称空间中的名字
- 
只有符合上述两个特征的函数才可以称之为"闭包函数" 
 def outer():
 x = 222
 def index():
 print('from index', x)
 return index
 闭包函数其实是给函数传参的第二种方式
- 
方式1:函数体代码需要用到数据 直接在括号内定义形参即可 
 def index(username):
 print(username)
 def my_max(a, b):
 if a > b:
 return a
 return b
- 
方式2:利用闭包函数 
 def outer(x,y):
 x = 2
 y = 40
 def my_max():
 if x > y:
 return x
 return y
 return my_max
 res = outer(2,40)
 print(res())
 print(res())


 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号