zoukankan      html  css  js  c++  java
  • 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
    '''

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

    同一个颜色为一个作用域

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

  • 相关阅读:
    java并发之CopyOnWriteArraySet
    MySQL 锁
    MySQL 汇总
    MySQL 删除重复数据
    插入排序-PHP
    选择排序-PHP
    快速排序-PHP
    一文轻松读懂微服务、集群、分布式的概念和区别一文轻松读懂微服务、集群、分布式的概念和区别
    k8s与docker简介
    冒泡排序-PHP
  • 原文地址:https://www.cnblogs.com/guoruxin/p/9919105.html
Copyright © 2011-2022 走看看