python全局变量与局部变量

Posted 外部存储设备

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python全局变量与局部变量相关的知识,希望对你有一定的参考价值。

python默认作用域中声明的变量都是局部变量,当一个变量在局部作用域中没有声明,则会去找全局作用域中的这个变量。

例子1:

a = 100

def test_local():
    print(id(a)) # 140732287020976
    # 由于局部作用域尚未声明a,取的是全局变量a的id
    a = 123
    print(id(a)) # 140732287021712
    # 此时a表示局部变量a


if __name__ == "__main__":
    test_local()
    print(id(a)) # 140732287020976
    # test_local中对局部变量a的声明并不会影响到全局变量

例子2:

a = 100

def test_local():
    a = a+1
    # 这里的a不会取到全局变量a
    print(a)


if __name__ == "__main__":
    test_local()
    print(a)
    
# Traceback (most recent call last):
#   File "python_test.py", line 9, in <module>
#     test_local()
#   File "python_test.py", line 4, in test_local
#     a = a+1
# UnboundLocalError: local variable 'a' referenced before assignment

使用关键字global能够修改全局变量的内存地址

例1:

a = 100

def test_local():
    global a
    print(id(a)) # 140732285054896
    # 此时a表示全局变量
    a = 123
    print(id(a)) # 140732285055632


if __name__ == "__main__":
    test_local()
    print(id(a)) # 140732285055632
    # 全局变量a被修改

例2:

a = [1,2,3]

def test_local():
    print(id(a)) # 2454725550728
    a.append(4)
    print(id(a)) # 2454725550728
    # 修改可变对象的值不会改变对象的内存地址


if __name__ == "__main__":
    test_local()
    print(a) # [1, 2, 3, 4]
    # 全局可变对象a的值被修改了
    print(id(a)) # 2454725550728
    # 但是内存地址没有被修改

以上是关于python全局变量与局部变量的主要内容,如果未能解决你的问题,请参考以下文章

Python20之全局变量和局部变量

python:局部变量与全局变量

python学习-day15:局部变量与全局变量嵌套函数递归

Python 局部变量 与全局变量

python全局变量与局部变量

Python3——局部变量和全局变量