局部变量和全局变量辨析

作者: admin 分类: python 发布时间: 2022-08-13 21:33

今天在写python代码的时候遇到一个局部变量与全局变量的问题,下面来看代码:

a=30
def haha():
    
    print(a)
    a=400
   
haha()
print(a)

这么写会报错,为什么呢?

我的理解就是因为我在函数里面先写了print(a),但这时我函数里面并没有a这个变量,也是函数就会调用外面的全局变量a,打印出来的也是全局变量a的值,后面又有一个a=400的赋值,这就有问题了,在函数中,我已经调用了全局变量a,而我在函数里面又要定义全局变量a=400,这是超过了函数的赋值权限的,函数并没有申明这个a是全局变量,默认只能定义局部变量a。

另外一个网友的理解跟我的基本一致:

如果没有写 a = 400这一句,默认函数里面的print(a)会去全局变量找,但加了a = 400这一句,函数定义时就会把a作为局部变量了,而a的赋值a = 400这一句在print(a)的后面,所以函数定义本身就不可以这么定义,报的错误是:UnboundLocalError: local variable ‘a’ referenced before assignment
翻译过来就是:局部变量a的引用在它的定义之前,所以一调用就会报错

如果没有在函数里面定义变量a,那么是没问题的。比如:

a=30
def haha():
    
    print(a)
 
   
haha()
print(a)

函数中没有变量a,那么会在全局变量中找a 这个变量。当然,如果在函数中定义了变量a 也没有问题,但应该写在print(a)之前,这个时候函数里面定义了一个 局部变量a,不会对外部的全局变量a 产生影响。

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Powered by 草根站长笔记 © 2015-2020 草根站长笔记 Inc.版权所有,禁止转载