函数的嵌套
函数的嵌套定义:在一个函数内又定义了另外一个函数
#f2在执行f1时候被调用
def f1():
def f2():
print(“from f2”)
return f2
res=f1()
res()
#圆周长的函数,地下有两个子函数
def circle(radius,mode):
def perimiter(radius):
return 2math.piradius
def area(radius):
return math.pi*(radius ** 2)
if mode == 1:
return perimiter(radius)
elif mode == 2:
return area(radius)
print(circle(18,1))
print(circle(18,2))
二、名称空间就是存放名字的地方
1、内置名称空间:存放的是python解释器自带的名字
生命周期:解释器启动则创建,解释器关闭就销毁
2、全局名称空间:内置以及函数内的名字之外的名字都存放于全局空间中
生命周期:运行顶级代码\主流水线则创建,顶级代码/主流水线结束则代码完结
3、局部名称空间:函数的名字
生命周期:函数调用时则创建,函数调用完毕则立即销毁
4、名称空间名字的查找顺序:基于当前所在的位置向上查找:局部-》外层套的局部》外层套的局部》。。。。。》全局》内置
三、作用域
全局作用域:内置名称空间、全局名称空间
全局存活、全局有效
局部作用域:局部名称空间
临时存活,局部有效
函数的参数传递都是值拷贝
x = 10
l = []
def func():
global x #可变类型可以不用global,不可变想改变需要global
x= 666
l.append()
func()
print(x)
print(l)
x = 10
def f1():
x=11
def f2:
nonlocal x#nonlocal当前层级的上一层(局部的)
x=66666
f2()
print(“f1 内的x====>”,x)
f1()
print(x)
五、闭包函数
闭包函数:函数对象+函数嵌套定义+名称空间与作用域
闭包函数指的是
闭:值得是定义函数内的函数
包:指的是函数内的函数访问了一个存在于外层函数名称空间汇总的名字
def outter():
x=1111
def inner():
print(x)
return inner #千万不要加括号
f = outter()
def f3():
x=22222
f()
f3()
闭包函数是一种新的为函数体代码传参的方式
方法一:直接通过参数的方式传入
def func(x):
print(x)
func(1)
func(2)
func(3)
方式二:
def outter():
x = 1
def func():
print(x)
return func #一定不要加括号
f = outter()
f1 = outter(1)
f2 = outter(2)
#以此类推
f()