python函数作用域范围之一
python函数作用域范围
演示一:
1 ef test1(): 2 print('func test1') 3 4 def test2(): 5 print('func test2') 6 return test1 7 8 res = test2() 9 # res是执行test2的返回结果,且test2()本身代表执行test2的过程,所以执行print('func test2')语句 10 res() 11 # res代表是test1的返回值即test1的函数名,函数即对象,res()代表执行了一次test1, 12 # 即test1(),所以执行print('func test1')语句,即打印操作 13 print(res()) 14 # print(res())在上一步的基础上,增加打印返回值的功能,即打印test1的内存地址功能
output:
func test2
func test1
func test1
None
--------------------------------------------------------------------这是分割线--------------------------------------------------------------------------------
演示二
1 def foo(): 2 name = 'lhf' 3 def bar(): 4 name = 'wupeiqi' 5 def tt(): 6 print(name) 7 return tt 8 return bar 9 10 foo() # 返回bar函数,打印则显示bar地址 11 12 a = foo() 13 print(a) # 打印出a的地址 14 15 a() # 返回tt函数,打印显示tt地址,此时a()相等于foo()() 16 t=a() 17 print(t) # 打印出t的地址 18 19 t() 20 foo()()() 21 # 此时无返回值,直接执行print(name)语句,t()相等于foo()()() 22 # 因为tt函数内无name变量,故自动向上一层寻找,打印出name的值'wupeiqi', 23 # 如果上一层也没有,则继续再上一层查找,直到找到变量name,否则报错
output:
<function foo.<locals>.bar at 0x031F1460>
<function foo.<locals>.bar.<locals>.tt at 0x031F1418>
wupeiqi
wupeiqi