Python 全局变量和局部变量 [Python Function][Python 全局变量作用域][Python 局部变量作用域]

您的“关注”和“点赞”,是信任,是认可,是支持,是动力…

如意见相佐,可留言。
本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。

1 Python 全局变量

1.1 Python 全局变量概述

在 Python 中,根据变量的定义位置划分,在所有函数的外部定义的变量,称为全局变量,英文叫做 Global Variable。

1.2 定义全局变量的方式

1.2.1 在函数外定义全局变量

在所有函数外定义的变量,铁定是全局变量。

举例如下所示:

name = '码农阿杰'  # 函数外定义全局变量


def info():  # 定义 info() 函数
    print('在函数内访问全局变量 name =', name)


info()  # 调用 info() 函数
print('在函数外访问全局变量 name =', name)

运行结果:

在函数内访问全局变量 name = 码农阿杰
在函数外访问全局变量 name = 码农阿杰

1.2.2 在函数内定义全局变量

在函数内定义的变量,如果使用 global 关键字对其修饰,那么该变量就是全局变量。

举例如下所示:

def info():  # 定义 info() 函数
    global name  # 注意:先使用 global 关键字对函数内的变量进行修饰,此时不能给变量赋值,否则语法会不通过的哦。
    name = '阿杰老师'  # 注意:再对变量进行赋值。那么 name 变量就变成了全局变量。
    print('在函数内访问全局变量 name =', name)


info()  # 调用 info() 函数
print('在函数外访问全局变量 name =', name)

运行结果:

在函数内访问全局变量 name = 阿杰老师
在函数外访问全局变量 name = 阿杰老师

1.3 Python 全局变量作用域概述

Python 全局变量的默认作用域是整个程序。

具体指的是全局变量可以在各个函数的外部使用,也可以在各个函数的内部使用。从上面的例子中可以看出,全局变量 name ,既可以在函数内被访问,也可以在函数外被访问。

2 Python 局部变量

2.1 Python 局部变量概述

在 Python 中,根据变量的定义位置划分,在函数内部定义的变量,称为局部变量,英文叫做 Local Variable。

举例如下所示:

例一,

def info():  # 定义 info() 函数
    name = '阿杰老师'  # 在函数内定义的局部变量 name
    print('在函数内访问全局变量 name =', name)


info()  # 调用 info() 函数
print('在函数外访问全局变量 name =', name)  # 在函数外访问局部变量,会报错

运行结果:

在函数内访问全局变量 name = 阿杰老师
    print('在函数外访问全局变量 name =', name)
NameError: name 'name' is not defined

例二,

def info(age):  # 定义 info(age) 函数
    name = '阿杰老师'  # 在函数内定义的局部变量 name
    print('在函数内访问全局变量 name =', name)
    print('在函数内访问形参 age =', age)


info(18)  # 调用 info() 函数
print('在函数外访问全局变量 name =', name)  # 在函数外无法访问局部变量
print('在函数外访问形参 name =', age)  # 形参也是局部变量,在函数外无法访问

运行结果:

在函数内访问全局变量 name = 阿杰老师
在函数内访问形参 age = 18
Traceback (most recent call last):
  File "D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py", line 11, in <module>
    print('在函数外访问全局变量 name =', name)  # 在函数外无法访问局部变量
NameError: name 'name' is not defined

2.2 Python 局部变量作用域概述

Python 局部变量的作用域仅限于函数内部,出了函数就不能使用了,

具体指的是局部变量在函数外部被访问,Python 解释器会报 NameError 错误,并提示我们没有定义要访问的变量。从上面的例子以及运行结果可以看出。

3 获取指定作用域范围内的变量

3.1 使用 globals() 函数获取全局作用域内的所有全局变量

使用格式如下所示:

globals()

对以上格式说明,

  • globals():是 Python 的内置函数。
  • 返回值:globals() 函数返回一个包含全局作用域内的所有全局变量(包含 Python 内置的全局变量)的字典,键为变量名,值为变量值。

举例如下所示:

# 定义全局变量
name = '码农阿杰'
age = 18


def info():
    # 定义局部变量
    gender = '男'
    num = 1012


print(globals())
globals()['name'] = '阿杰'  # 访问全局变量 name,并修改
print('修改后的 name =', name)


运行结果:

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000017FE0CE0880>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py', '__cached__': None, 'name': '码农阿杰', 'age': 18, 'info': <function info at 0x0000017FE2935EE0>}
修改后的 name = 阿杰

3.2 使用 locals() 函数获取当前作用域内所有变量

使用格式如下所示:

locals()

对以上格式说明,

  • locals():是 Python 的内置函数。
  • 返回值:返回包含当前作用域(在函数内用 locals() 函数,返回包含所有局部变量的字典;在函数外用 locals() 函数,与 globals() 函数作用相同)内所有变量(包含 Python 内置的全局变量)的字典。

举例如下所示:

# 定义全局变量
name = '码农阿杰'
age = 18


def info():
    # 定义局部变量
    gender = '男'
    num = 1012
    print(locals())  # 在函数内使用 locals() 函数
    locals()[gender] = '女'  # 只能访问,不能修改
    print('修改后 gender =', gender)


info()  # 调用 info() 函数
print('------------------------------')
print(locals())  # 在函数外使用 locals() 函数

运行结果:

{'gender': '男', 'num': 1012}
修改后 gender =------------------------------
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000012533DF0880>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py', '__cached__': None, 'name': '码农阿杰', 'age': 18, 'info': <function info at 0x0000012535A35EE0>}

3.3 使用 vars(object) 函数获取指定范围内所有的变量

使用格式如下所示:

vars([object])

对以上格式说明,

  • vars():是 Python 的内置函数。
  • 返回值:返回一个指定 object 对象范围内所有变量(包含 Python 内置的全局变量)组成的字典。
  • [object]:可选参数。不写 object 参数,vars() 和 locals() 的作用完全相同。

举例如下所示:

# 定义一个 Person 类
class Person:
    # 定义全局变量
    name = '码农阿杰'
    age = 18


print(vars())  # 不写 object 参数,跟 locals() 函数用法一样。
print('----------------------------')
print(vars(Person))  # 写 object 参数

运行结果:

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001C00F7E0880>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/Data/ProfessionalSkills/Python/PycharmProjects/demo/demo.py', '__cached__': None, 'Person': <class '__main__.Person'>}
----------------------------
{'__module__': '__main__', 'name': '码农阿杰', 'age': 18, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}

【友情链接】

微信公众号:码农阿杰

博客园

【参考资料】

Python 官网

Python 3.8.2 documentation

猜你喜欢

转载自blog.csdn.net/manongajie/article/details/106200731