一. 函数的嵌套
1. 函数的嵌套调用
定义:在电泳函数的过程中,调用的其他函数
1 #函数嵌套的调用 2 def max2(x,y): 3 if x > y: 4 return x 5 else: 6 return y 7 8 def max3(a,b,c,d): 9 res=max2(a,b) 10 res2=max2(res,c) 11 res3=max2(res2,d) 12 return res3 13 14 res=max3(1,2,3,4) 15 print(res) 16 17 #函数嵌套的定义: 18 def foo(): 19 def foo1(): 20 def foo2(): 21 def foo3(): 22 print('from foo3') 23 foo3() 24 foo2() 25 foo1() 26 foo()
二.名称空间和作用域
1. 名称空间:存放名字和变量值绑定关系的地方,有三种名称空间:内置名称空间,全局名称空间,局部名称空间。
内置名称空间:在python解释器启动时产生,存放一些python内置名字。
全局名称空间:在执行文件时产生,存放文件级别定义的名字。
局部名称空间:在执行文件过程中,如果调用了函数,则产生该函数的局部名称空间,用来存放该函数内定义的名字,该名字在函数调用时生效,在函数调用结束后失效。
名字的加载顺序是:内置====》全局 ====》局部
名字的查找顺序是:局部====》全局 ====》内置
2. 作用域:即作用范围
作用域关系是在函数定义阶段就已经固定,与函数的调用无关。
2.1 全局作用域:全局存活,全局有效(globals())
1 max=1111 2 def foo(): 3 def foo1(): 4 def foo2(): 5 def foo3(): 6 print(max) 7 foo3() 8 foo2() 9 foo1() 10 foo() 11 12 #global 在函数内引用全局变量,可以修改全局变量 13 x=1111 14 def foo(): 15 global x 16 x=100 17 def foo1(): 18 def foo2(): 19 def foo3(): 20 print(x) 21 foo3() 22 foo2() 23 foo1() 24 foo() 25 print(x)