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

posted @ 2021-01-31 11:37  Mr_huangze  阅读(143)  评论(0)    收藏  举报