当前位置: 网站首页>网站建设>服务器空间

佛山网站建设_企业网站制作公司_高端网站设计开发-佛山上往

发表日期: 2022-07-04 14:13:47 浏览次数:14

佛山网站建设_企业网站制作公司_高端网站设计开发-佛山上往

网站建设.png

以上只是说明了全局变量仅仅是在 .py 文件中直接声明的变量叫全局变量,还有在 .py 文件中直接写的逻辑代码块中,也是全局变量。也就是说在 if/elif/else/、try/except、for/while 等逻辑代码块中的变量。

这个教程中在介绍三种命令空间的时候,说查找变量的顺序为局部的命名空间去 -> 全局命名空间 -> 内置命名空间,但是我理解的变量查找顺序为:当前域 -> 外部域(如果有) -> 全局域 -> 内置域。

光说没有什么概念,我们来一段代码就清楚了。

我们以 demo1.py 为例子:

global_var='this  var  on  global space' '''
申明global_var这个位置就是全局域,也就是教程中所说的全局作用域,
同时它也是直接声明在文件中的,而不是声明在函数中或者类中的变量
'''class demo():
  class_demo_local_var='class member' 
  '''
  虽然class_demo_local_var在这里是局部变量,这个局部变量的域相对于var_locals是外部域,
  所以可以直接被var_locals所在的更小的局部域访问
  '''
  def localFunc(self):
    var_locals='local_func_var'
    '''
    这里也是局部变量,但是相对于class_demo_local_var变量,却是更小的域,
    因此class_demo_local_var所在的哪个域无法访问到当前域来
    '''
    print(self.class_demo_local_var)#到这里会查找当前域中有没有class_demo_local_var这个变量,然后再到相对于当前域的外部域去查找变量



教程中写到 Python 中变量的查找顺序:“在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再去内置中找。可以看一个具体的例子。


Python 的一个内建值 int,我们首先将其赋值为 0,然后定义一个函数 fun1()。


int = 0

def fun1():

    int = 1

    def fun2():

        int = 2

        print(int)

    fun2()

fun1()  # 输出 2

函数 fun1() 的作用就是调用函数 fun2() 来打印 int 的值。


输出结果为:2


因为 local 中的 int = 2,函数将其打印出来。


将函数 fun2() 中的 int = 2 删除:


int = 0

def fun1():

    int = 1

    def fun2():

        print(int)

    fun2()

fun1()  # 输出 1

调用函数 fun1() 输出结果为:1


因为 local 找不到 int 的值,就去上一层 non-local 寻找,发现 int = 1 并打印。


而进一步删除函数 fun1() 中的 int = 1:


int = 0

def fun1():

    def fun2():

        print(int)

    fun2()

fun1() # 输出 0

调用函数 fun1() 输出结果为:0


因为 local 和 non-local 都找不到 int 的值,便去 global 中寻找,发现 int = 0 并打印。


若删除 int = 0这一条件:


def fun1():

    def fun2():

        print(int)

    fun2()

fun1()

调用函数 fun1() 输出结果如下:


<class 'int'>

因为 local、non-local、global 中都没有 int 的值,便去 built-in 中寻找 int 的值,即:


>>> int

<class 'int'>

tempo

   tempo


  luo***7@iccas.ac.cn


3年前 (2019-12-16)

   GsxxInRnb


  993***819@qq.com


   参考地址


19

若没有使用 global 或 nonlocal 关键字对局部变量进行声明,在局部作用域中,可以访问全局命名空间中的变量,不可对其进行赋值。


对于教程中的这个实例:


a = 10

def test():

    a = a + 1

    print(a)

test()

运行后如下:(提示出错)


Traceback (most recent call last):

  File "<input>", line 5, in <module>

  File "<input>", line 3, in test

UnboundLocalError: local variable 'a' referenced before assignment

若程序改为如下:


a = 10

def test():    

    b = a + 1    

    print(b)

test()

运行结果:(正常运行)


11

在函数 test() 中,可以读取全局命名空间中的 “a”,对应语句 “b=a+1”。


即在局部作用域中,可以访问全局命名空间中的变量。


若程序改为如下:


a = 10





佛山网站建设_企业网站制作公司_高端网站设计开发-佛山上往

想要咨询,请留言,我们的工作人员将尽快与您联系!
  
400-111-6878
服务热线
在线留言
在线咨询
预约专家
顶部

备案号: 苏ICP备11067224号

CopyRight © 2021 上往建站 All Right Reserved 未经许可不得复制转载

24小时服务热线:400-111-6878   E-MAIL:1120768800@qq.com   QQ:1120768800

  网址: https://www.768800.com

关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|

企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|

400电话办理| 书生商友软件| 苏州网站建设| 调温纤维| 海洋馆运营维护|

预约专家

欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系

  

服务热线:400-111-6878