函数作用域

前景知识概要:python函数名代表的是函数名的地址,类似于c语言中的指针。如果需要调用python函数,则需要使用函数名()的形式调用。如果在函数中返回的是函数名,则返回的是函数名相应的内存地址,通过一个参数接受此内存地址,可运行返回的函数。

如下代码

1 name = "tiger"
2 def foo():
3     name = "tiger1"
4     def bar():
5         name = "tiger bar"
6         print(name)
7     return bar  #返回的是bar函数的内存地址
8 a = foo()    #通过a变量接受bar函数的内存地址,如果运行a()则等同于bar()
9 print(a
<function foo.<locals>.bar at 0x0000027CB036FE18>

 如果函数有多次嵌套:

1、函数foo()则表示运行一次foo函数,则得到bar的内存地址,可理解为bar=foo()

2、函数foo()(),通过变量替换法,为bar(),运行结果为打印name,也就是"bar",并且返回tt的内存地址,tt=bar()

3、函数foo()()(),同上tt(),打印name,也就是"tt"

查看以下执行结果,为了获取到tt的内存地址,一次会执行foo(),bar(),tt(),通过执行这一系列函数来获取内层函数的内存地址,并直接以内存地址加上()的方式执行。

 1 def foo():
 2     name = "xxx"
 3     def bar():
 4         name = "bar"
 5         print(name)
 6         def tt():
 7             name = "tt"
 8             print(name)
 9         return tt
10     return bar
11 
12 foo()()()

执行结果为:

bar
tt
原文地址:https://www.cnblogs.com/chrrydot/p/9784774.html