一文读懂 Python 全局变量和局部变量

版本

  • Python 3.9

前言

  • 在 Python 编程中,全局变量和局部变量是非常重要的概念之一。全局变量是在整个程序范围内可见和可用的变量,而局部变量则是在特定作用域内可见和可用的变量。在本文中,我们将深入探讨 Python 中全局变量和局部变量的概念,并通过代码示例进行说明。

全局变量和局部变量

全局变量

  • 全局变量是在程序的最外层定义的变量,在整个程序中都可以访问。在 Python 中,我们可以通过在函数外部定义变量来创建全局变量。让我们看一个例子:
def print_global_var():
    print("全局变量的值为:", global_var)


# 定义全局变量
global_var = 10
# 调用函数
print_global_var()
  • 在这个例子中,global_var 是一个全局变量,它在函数外部定义,并在函数内部被访问。运行以上代码,将会输出:
全局变量的值为: 10

局部变量

  • 局部变量是在函数内部定义的变量,只能在函数内部访问。它们的作用域仅限于函数内部,出了函数就无法访问。让我们来看一个示例:
def print_local_var():
    # 定义局部变量
    local_var = 20
    print("局部变量的值为:", local_var)

# 调用函数
print_local_var()
  • 在这个示例中,local_var 是一个局部变量,它在函数内部定义,并在函数内部被访问。运行以上代码,将会输出:
局部变量的值为: 20

全局变量与局部变量的关系

  • 在 Python 中,如果在函数内部尝试访问一个变量,首先会在当前函数的作用域内查找该变量。如果找不到,Python 将会继续在外层作用域中查找,直到找到为止。因此,函数内部可以访问全局变量。
  • 如果在函数内部试图修改全局变量的值,Python 将会创建一个新的局部变量,而不是修改全局变量的值。这是因为 Python 认为在函数内部修改全局变量可能会导致混乱,因此默认情况下会将其视为局部变量。
global_var = 10

def modify_global_var():
    global_var += 30
    print("修改后的全局变量的值为:", global_var)

# 调用函数
modify_global_var()
print("全局变量的值为:", global_var)
  • 在上面的示例中,为了避免造成混乱,Python 默认将 global_var 视为局部变量,因此会报错:UnboundLocalError: local variable 'global_var' referenced before assignment
  • 为了明确告诉 Python 我们要修改全局变量的值,我们可以使用 global 关键字。让我们看一个修改后的示例:
global_var = 10

def modify_global_var():
    global global_var
    global_var += 30
    print("修改后的全局变量的值为:", global_var)

# 调用函数
modify_global_var()
print("全局变量的值为:", global_var)
  • 在这个示例中,我们使用了 global 关键字来告诉 Python 我们要修改全局变量 global_var 的值。运行以上代码,将会输出:
修改后的全局变量的值为: 40
全局变量的值为: 40

总结

  • 在本文中,我们深入探讨了 Python 中的全局变量和局部变量的概念。我们了解了全局变量是在整个程序范围内可见和可用的变量,而局部变量则是在特定作用域内可见和可用的变量。我们还学习了如何在 Python 中定义和访问全局变量和局部变量,并了解了它们之间的关系。

个人简介

👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.

🚀 我对技术的热情是我不断学习和分享的动力。我的博客是一个关于Java生态系统、后端开发和最新技术趋势的地方。

🧠 作为一个 Java 后端技术爱好者,我不仅热衷于探索语言的新特性和技术的深度,还热衷于分享我的见解和最佳实践。我相信知识的分享和社区合作可以帮助我们共同成长。

💡 在我的博客上,你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据库管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容的深入文章。我也将分享一些编程技巧和解决问题的方法,以帮助你更好地掌握Java编程。

🌐 我鼓励互动和建立社区,因此请留下你的问题、建议或主题请求,让我知道你感兴趣的内容。此外,我将分享最新的互联网和技术资讯,以确保你与技术世界的最新发展保持联系。我期待与你一起在技术之路上前进,一起探讨技术世界的无限可能性。

📖 保持关注我的博客,让我们共同追求技术卓越。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lorin 洛林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值