Python小白学习之路(十二)—【前向引用】【风湿理论】

前向引用

风湿理论(函数即变量)

理论总是很抽象,我个人理解: 


代码从上到下执行,一旦遇到定义的函数体,内存便为其开辟空间,并用该函数的名字作为一个标识
但是该函数体内具体是什么内容,这个时候并不着急去读取
而是在程序中需要调用执行该函数时,去执行该函数内的具体内容
如果一个函数还未开辟内存空间就先调用,就会报错
这也很好理解,因为程序都不知道这个函数放在哪里,也不知道该函数的标识是什么,
自然也不知道去哪里找它啊

我们来通过分析一个程序来看看具体含义吧

 1 name = 'xhg'
 2 def name1():
 3     name = 'aa'
 4     print(name)
 5     def name2():
 6         name = 'bb'
 7         print(name)
 8         def name3():
 9             name = 'cc'
10             print(name)
11         print(name)
12         name3()
13     name2()
14     print(name)
15 print(name)
16 name1()
'''
#执行结果
xhg
aa
bb
bb
cc
aa
xhg
'''
'''
#分析程序执行过程
1.执行第一行代码 name = 'xhg'          定义了全局变量
2.执行第二行代码 def name1():          由于是定义了一个函数体,所以内存开辟了空间,并用name1作为标识,但是具体内容不进行读取
3.执行第十五行代码 print(name)         此时打印 xhg
4.执行第十六行代码 name1()             执行定义的函数name1(),所以程序到刚才内存开辟的以name1为标识的地方去读取具体内容
5.执行第三行代码 name = 'aa'           定义了局部变量
6.执行第四行代码 print(name)           从当前作用域找变量的值,所以此时打印 aa
7.执行第五行代码 def name2():          由于是定义了一个函数体,所以内存开辟了空间,并用name2作为标识,但是具体内容不进行读取
8.执行第十三行代码 name2()             执行定义的函数name2(),所以程序到刚才内存开辟的以name2为标识的地方去读取具体内容
9.执行第六行代码 name = 'bb'           定义了局部变量
10.执行第七行代码 print(name)          从当前作用域找变量的值,所以此时打印 bb
11.执行第八行代码 def name3():         由于是定义了一个函数体,所以内存开辟了空间,并用name3作为标识,但是具体内容不进行读取
12.执行第十一行代码 print(name)        从当前作用域找变量的值,所以此时打印 bb
13.执行第十二行代码 name3()            执行定义的函数name3(),所以程序到刚才内存开辟的以name3为标识的地方去读取具体内容
14.执行第九行代码 name = 'cc'          定义了局部变量
15.执行第十行代码 print(name)          从当前作用域找变量的值,所以此时打印 cc
16.执行第十四行代码 print(name)        从当前作用域找变量的值,所以此时打印 aa
17.执行第十七行代码 print(name)        从当前作用域找变量的值,所以此时打印 xhg
'''

为了更好的理解,我画了一个图

同一个颜色为一个作用域

每一行代码前的数字代表执行的顺序

原文地址:https://www.cnblogs.com/guoruxin/p/9919105.html