Python之函数(四)函数的嵌套和global、nonlocal

函数的嵌套
函数的嵌套

def func()
print(1)
def f1():
print(2)
return f1()
func()
结果为:1 2
不管在什么位置,只要是函数+()就是在调用此函数
函数调用执行后,函数体中开辟的空间就自动销毁了
def func():
a=1
def foo():
b=2
print(b)
print(a)
def f1():
print(b)
return f1()
return foo()
print(func())
结果为:2 1 2 None
print(func()) 输出func()的返回值
如果 函数里没有此变量 就找上面那一层(即父子层)

函数的相互引用

def func():
a=1
foo():
print(a)
def foo():
b=2
print(b)
func()
结果为:2 1

def a():
a1=1
c()
print(c)
def b():
b1=2
print(b1)
def c():
c1=3
print(a)
def run():
a()
print(run())
结果为:
<function a at 0x0000024CE8801E18>
<function c at 0x0000024CE89DA950>
None

def func():
a=1
def b():
print(a)
def foo():
b=1
def z():
print(func)
print(b)
ret=z()
func()
return ret
def run()
foo()
print(run())
结果为:
<function func at 0x00000242CF281E18>
1
None

def func(a):
foo(a)
def foo(e):
b(e)
def b(c):
print(c)
return 10
print(func(5))
结果为:
5
None
4.5 global 及 nonlocal
global(声明修改全局变量的值)

a=10
def func():
global a # 声明修改全局变量的值
a += 1
print(a)
func()
print(a)
结果为: 11 11

a = 10
def f1():
a = 10
def f2():
a = 15
def f3():
global a
a += 1
print(a) # 11
print(a) # 15
f3()
print(a) # 10
f2()
f1()
结果为:10 15 11

a=10
def func():
def f1():
a=15
def foo():
nonlocal a
a+=1
print(a)
foo()
print(a)
f1()
func()
print(a)
结果为:16 16 10

总结:

global:修改全局空间的变量对应的值

nonlobal:在外层的函数中,修改局部空间的变量值,完全不涉及全局变量

nonlobal只修改离它最近的一层,最近的一层没有变量继续向上找,直到找到最外层函数

猜你喜欢

转载自www.cnblogs.com/yhx003/p/11438548.html
今日推荐