您的“关注”和“点赞”,是信任,是认可,是支持,是动力…
如意见相佐,可留言。
本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。
在 Python 中,根据变量的定义位置划分,在所有函数的外部定义的变量,称为全局变量,英文叫做 Global Variable。
在所有函数外定义的变量,铁定是全局变量。
举例如下所示:
name = '码农阿杰' # 函数外定义全局变量
def info(): # 定义 info() 函数
print('在函数内访问全局变量 name =', name)
info() # 调用 info() 函数
print('在函数外访问全局变量 name =', name)
运行结果:
在函数内访问全局变量 name = 码农阿杰
在函数外访问全局变量 name = 码农阿杰
在函数内定义的变量,如果使用 global
关键字对其修饰,那么该变量就是全局变量。
举例如下所示:
def info(): # 定义 info() 函数
global name # 注意:先使用 global 关键字对函数内的变量进行修饰,此时不能给变量赋值,否则语法会不通过的哦。
name = '阿杰老师' # 注意:再对变量进行赋值。那么 name 变量就变成了全局变量。
print('在函数内访问全局变量 name =', name)
info() # 调用 info() 函数
print('在函数外访问全局变量 name =', name)
运行结果:
在函数内访问全局变量 name = 阿杰老师
在函数外访问全局变量 name = 阿杰老师
Python 全局变量的默认作用域是整个程序。
具体指的是全局变量可以在各个函数的外部使用,也可以在各个函数的内部使用。从上面的例子中可以看出,全局变量 name ,既可以在函数内被访问,也可以在函数外被访问。
在 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
Python 局部变量的作用域仅限于函数内部,出了函数就不能使用了,
具体指的是局部变量在函数外部被访问,Python 解释器会报 NameError
错误,并提示我们没有定义要访问的变量。从上面的例子以及运行结果可以看出。
使用格式如下所示:
globals()
对以上格式说明,
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 = 阿杰
使用格式如下所示:
locals()
对以上格式说明,
locals()
:是 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>}
使用格式如下所示:
vars([object])
对以上格式说明,
vars()
:是 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}