嵌套函数
1:
def func1():
print('老王去唱歌啦!')
def func2():
print('老李去找老王媳妇玩了!')
func2()
func1() #1:函数可以无限嵌套 2:不管里面嵌套多少层但是最外边的一定要调用 否则整个嵌套函数将不会执行
2:
age = 22
def func1():
age = 73
def func2():
age = 84
print(age)
func2()
func1() # 函数遵循由内而外,如果一个被嵌套的函数要打印一个变量 会先从自己的局部找 找不到才会去上级或者全局
3:
age = 22
def func1():
def func2():
print(age)
age = 84
func2()
func1() #这里在第二个局部变量中虽然‘age’最后才定义 但是由于函数是在遇见调用才执行 所以 age‘已经被读到内存中 此时打印age = 84
4:
age = 22
def func1():
print(age) #这里报错 因为只要是局部变量只会优先找任意一个局部的变量 并不会找全局的变量除非’global‘ 因为在第二个局部中有’age‘但是 因为函数执行前会大概了解哪些位置有什么,这里’python‘知道局部有变量 但不知道是什么变量 所以打印第一个’age‘提示引用局部变量
def func2():
print(age)
age = 84
func2()
func1() #这里会报错找不到变量
打印:
local variable 'age' referenced before assignment
赋值前引用的局部变量“年龄”
5:
age = 22
def func1():
global age
def func2():
print(age)
func2() #这里虽然声明 ’global‘但是代码有上向下执行当’func2‘执行完才把’age‘重新赋值 所以这里age = 22
age = 84
func1()
print(age)这里age = 84 因为这一步age已经被更改了
6:
age = 22
def func1():
global age #这里会优先读取变量并重新赋值’age‘所以俩打印结果都是’84‘
def func2():
print(age)
age = 84
func2()
func1()
print(age)