【Python学习】【第四节】【变量作用域】

变量的作用域由变量的定义位置决定,在不同位置定义,作用域是不一样的,主要有局域变量和全局变量。

一、局域变量

在函数内部定义的变量,作用域仅限于局域内部。

函数的参数也属于局域变量。

二、全局变量

除了在函数内部定义变量,python还允许在所有函数的外部定义变量,这样的变量称为全局变量。

方式一:在函数体外定义的变量

方式二:在函数体内,使用global var

三、获取制定作用域范围中的变量

1.globals(),函数返回一个包含全局范围内所有变量的字典,该字典中的每个键值对,键为变量名,值为该变量的值,并可对全局变量的值进行修改。

a="你好"
b="Hello"
def text():
    print(a)
    print(b)
print(globals()) #{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001F22163F3C8>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:/Users/00260573/Desktop/Python/time/12.py', '__cached__': None, 'a': '你好', 'b': 'Hello', 'text': <function text at 0x000001F2216F73A8>}

  globals()["a"]="您好"
  print(a)  #“您好”,a的值变化了

2.locals()

a="你好"
b="Hello"
def text():
    c="lucy"
    d="Lucas"
    print("函数内部的locals:%s"%locals())
text() #函数内部的locals:{'c': 'lucy', 'd': 'Lucas'}
print(
"函数内部的locals:%s"%locals()) #函数外部的locals:{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000002CA9B8EF3C8>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:/Users/00260573/Desktop/Python/time/12.py', '__cached__': None, 'a': '你好', 'b': 'Hello', 'text': <function text at 0x000002CA9BA773A8>}

在函数外调用locals()与globals()的作用一样

注意,当使用 locals() 函数获得所有局部变量组成的字典时,可以向 globals() 函数那样,通过指定键访问对应的变量值,但无法对变量值做修改。例如:

a="你好"
b="Hello"
def text():
    c="lucy"
    d="Lucas"
    locals()["c"]="lily"
    print(c)
text()  #Lucy

3.vars(object

vars() 函数也是 Python 内置函数,其功能是返回一个指定 object 对象范围内所有变量组成的字典。如果不传入object 参数,vars() 和 locals() 的作用完全相同,传入object参数,与globals()的作用完全相同。

原文地址:https://www.cnblogs.com/yuhuang/p/12960803.html