Python局部与全局变量作用域及global关键字详解

向北走
向北走
发布时间:2026-10-13| 4人浏览过
原创

本文详细解析Python中局部变量与全局变量的作用域规则。通过代码示例说明如何定义和使用全局变量,重点讲解global关键字在函数内部修改全局变量的机制,以及nonlocal关键字处理嵌套函数变量的用法,帮助开发者避免变量命名冲突并正确管理数据状态。

在Python编程中,理解局部变量与全局变量的区别至关重要。局部变量仅在定义它的函数内部有效,而全局变量则在整个程序生命周期内可见。以下代码片段展示了如何定义全局变量name,并在函数change_name中尝试修改它。注意,若未在函数内使用global关键字声明,直接赋值会创建一个新的局部变量,而非修改全局变量。

# name='lhf'
# def change_name():
#   # global name
#   name='帅了一比'
#   print('change_name',name)
#
#
# change_name()
# print(name)
# name='lhf'
#
# def change_name():
#   name1='帅了一比'
#   name2='帅了一比'
#   name3='帅了一比'
#   print('change_name',name)
#
# change_name()
# globals
# NAME = "杠娘"
#
# def yangjian():
#   # NAME = "史正文"
#   global NAME
#   NAME = "小东北"
#   print('我要搞', NAME)
#
# def qupengfei():
#   NAME = "基"
#   print('我要搞', NAME)
#
# yangjian()
# qupengfei()
# NAME = "产品经理"
# def yangjian():
#   # NAME = "史正文"
#   global NAME # 已经声明,NAME就是全局的的那个变量
#   print('我要搞', NAME)
#   NAME = "小东北" # 修改 全局的变量
#   print('我要搞', NAME)
# def qupengfei():
#   NAME = "基"
#   print('我要搞', NAME)
# 如果函数的内容无global关键字,
#  - 有声明局部变量
# NAME = ["产品经理","廖波湿"]
# def qupengfei():
#   NAME = "自己"
#   print('我要搞', NAME)
# qupengfei()
#  - 无声明局部变量
# NAME = ["产品经理","廖波湿"]
# def qupengfei():
#   NAME.append('XXOO')
#   print('我要搞', NAME)
# qupengfei()
# 如果函数的内容有global关键字
#  - 有声明局部变量
# NAME = ["产品经理","廖波湿"]
# def qupengfei():
#   global NAME
#   NAME = "自己"
#   print('我要搞', NAME)
# qupengfei()
    # 错误示例
# NAME = ["产品经理","廖波湿"]
# def qupengfei():
#   NAME = "自己"
#   global NAME
#   print('我要搞', NAME)
# qupengfei()
#  - 无声明局部变量
# NAME = ["产品经理","廖波湿"]
# def qupengfei():
#   global NAME
#   NAME = ["阿毛"]
#   NAME.append('XXOO')
#   print('我要搞', NAME)
# qupengfei()
######## 全局变量变量名大写
######## 局部变量变量名小写
# 优先读取局部变量,能读取全局变量,无法对全局变量重新赋值 NAME=“fff”,
#   但是对于可变类型,可以对内部元素进行操作
# 如果函数中有global关键字,变量本质上就是全局的那个变量,可读取可赋值 NAME=“fff”
# qupengfei()
# yangjian()
NAME = ["产品经理","廖波湿"]
# def yangjian():
#   # NAME = "史正文"
#   global NAME # 已经声明,NAME就是全局的的那个变量
#   print('我要搞', NAME)
#   NAME = "小东北" # 修改 全局的变量
#   print('我要搞', NAME)
# def qupengfei():
#   # NAME = "aS"
#   NAME.append('天扎龙')
#   print('我要搞', NAME)
#
# qupengfei()
# NAME = ["产品经理","廖波湿"]
# def qupengfei():
#   name = "自己"
#   global NAME
#   print('我要搞', NAME)
# qupengfei()
# NAME = '海风'
#
# def huangwei():
#   name = "黄伟"
#   print(name)
#   def liuyang():
#     name = "刘洋"
#     print(name)
#     def nulige():
#       name = '沪指花'
#       print(name)
#     print(name)
#     nulige()
#   liuyang()
#   print(name)
#
# huangwei()
# name = "刚娘"
# 
# def weihou():
#   name = "陈卓"
#   def weiweihou():
#     nonlocal name  # nonlocal,指定上一级变量,如果没有就继续往上直到找到为止
#     name = "冷静"
# 
#   weiweihou()
#   print(name)
# 
# print(name)
# weihou()
# print(name)
# 刚娘
# 冷静
# 刚娘

通过上述示例,我们可以总结出Python变量作用域的核心规则:首先,函数内部定义的变量默认为局部变量;其次,若需在函数内部修改全局变量,必须使用global关键字显式声明;最后,对于嵌套函数,可使用nonlocal关键字引用外层函数的变量。掌握这些规则有助于编写更清晰、可维护的代码,避免意外覆盖全局状态。

以上所述是Python中常量和变量代码的详细解析,旨在帮助读者深入理解变量作用域机制。希望这些内容能对您的学习有所帮助。如果您有任何疑问或需要进一步探讨,欢迎留言,我们将及时回复。在此,也非常感谢大家对本站网站的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。