global与nonlocal关键字使用
global关键字
# x = 111
# def index():
# # 局部修改全局变量 需要使用关键字声明
# global x
# x = 222
# index()
# print(x) # 222
# name_list = ['jason', 'kevin']
# def index():
# name_list.append('heiheihei')
# index()
# print(name_list) # ['jason', 'kevin', 'heiheihei']
如果想在局部修改全局数据
如果数据为不可变类型则需要关键字global声明
如果数据为可变类型则无需关键字global声明
nonlocal
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)
函数嵌套
嵌套调用:函数内部调用其它函数
函数体内部定义其他函数
将复杂的功能全部隐藏起来 暴露一个简单的接口
# def index():
# print('from index')
# def func():
# index()
# print('from func')
# func()
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 func(x, y):
print(x, y)
func(2, 3)
闭包函数传参
def outer():
x = 1
y = 2
def func():
print(x, y)
return func
outer = func()
func()