函数嵌套:
函数的嵌套调用:在调用一个函数的过程中,又调用了了另外一个函数
比如说比较多个值的大小,可以利用这种方法:
def max2(x,y):
if x > y:
return x
else:
return y
def max4(a,b,c,d):
res1=max2(a,b)
res2=max2(res1,c)
res3=max2(res2,d)
return res3
print(max4(1,2,3,4))
函数的嵌套定义:在一个函数的内部,又定义了另外一个函数。
名称空间: 存放名字的地方,准确的说名称空间是存放名字与变量值绑定关系的空间。
分为三种空间:
内置名称空间: python自带的名字,在python解释器启动时产生,存放一些python内置的名字。
全局名称空间: 在群居都能使用的定义,在执行文件时,存放文件级别定义的名字。
局部名称空间: 在执行文件的过程中,如果调用了函数,则会产生该函数的局部名称空间。用来存放该函数内定义的名字。在函数调用时生效,在函数调用结束后失效。
加载顺序; 内置---》全局-----》局部
定义的名字查找顺序:自下而上的查找
当定义了两个相同的函数,以后定义的为准:
def func0():
print('1111111')
def func0():
print('2222222')
func0()
作用域:作用的范围
全局作用域:全局存活,全局有效
局部作用域:临时存活,只能在函数内访问
global 和 nonlocal 关键字:
x=1
def f1():
global x #意思是在局部改掉全局的变量或者定义
x=2
f1()
print(x)
如果全局是可变类型的时候,可以改变全局类型
l=[]
def f2():
l.append('f2')
f2()
print(l)
改掉函数内部上一层的变量,只在函数内部有效,如果上层没有的话,再向上找,不能改掉全局的
def f1():
x=1
def f2():
x=2
def f3():
nonlocal x
x=3
f3()
f2()
f1()
print(x)
作用域关系,在函数定义的时候就已经固定好了,于调用位置无关。
x=1
def f1():
def f2():
print(x)
return f2 #相当于函数当做返回值,这里没有括号
#如果此时令func=f1(),即此时func=f2
func=f1()
print(func)