Python中的全局变量和局部变量

在这一课中,我们将学习函数的作用域,也就是全局变量局部变量、作用域以及命名空间的相关概念。让我们开始吧。

在所有编程语言中,每一个类、函数和变量都有一个作用域。简单来说,就是你创建的变量所在的代码块和命名空间是有效的,离开这个代码块后,它们会从内存中被删除。

局部变量 (Local Variable)

我们用一个简单的例子来展示一下:

def function():
    a = 5

function()
print(a)

运行这段代码时,我们会看到以下错误信息:

Traceback (most recent call last):
  File "/Users/baran/Documents/work/baransel.dev/functions.py", line 7, in <module>
    print(a)
NameError: name 'a' is not defined

这个错误的原因是变量 afunction() 函数之外是无法找到的,因为 a 变量的作用域仅限于 function() 函数内部。也就是说,变量 a 是一个局部变量。在一个函数中定义的变量只在该函数内有效。

全局变量 (Global Variable)

现在我们了解了什么是局部变量,接下来我们来看一下全局变量是什么。让我给你举个例子:

a = 3
def function():
    a = 5
    print(a)
function()
print(a)

# 5
# 3

运行这段代码时,我们会看到输出结果是 53。下面我们来看看这是怎么回事:

当程序运行时,由于 Python 是解释型语言,它会逐行读取代码,首先执行 function() 函数,结果在函数内部我们得到的 a 的值是 5。当 function() 执行完后,print() 函数会继续执行,输出的 a 的值是 3。这里,function() 函数中的 a 是一个局部变量,所以它的作用域仅限于函数内部。print() 函数无法访问这个局部变量,而是访问了全局变量 a。因此,我们可以将全局变量定义为:

全局变量是那些不属于单一函数的变量,一旦定义了它们,你可以在程序的任何地方调用和使用它们。

现在你可能会问:既然全局变量可以在任何地方使用,那我们能在函数内部调用这些全局变量吗?当然可以,来看一个例子:

a = 3
def function():
    print(a)
function()

# 3

Global 表达式 (Global Expression)

既然我们已经了解了这些概念,我还要告诉你一个小知识点,以免你混淆。在前面我们提到全局变量时,是指那些不属于某个函数的变量。可是,我们也可以在函数内部使用全局变量。那么,能不能在函数内部创建全局变量呢?让我们来试试:

def function():
    global a
    a = 3
    print(a)
function()
print(a)

# 3
# 3

从上面的代码中,我们得到了两个 3。来看看是怎么回事的:

首先,function() 函数会执行,并打印出 a 的值。然后 print() 函数会运行,由于我们在函数内使用了 global 关键字声明了 a 是一个全局变量,所以 print() 函数也能访问这个全局变量,输出的值还是 3

通过这个例子,我们学习了如何在函数内部使用 global 表达式来创建全局变量。不过有一点需要提醒你,虽然全局变量可以在程序的任何地方访问,但滥用它们可能会让代码变得复杂。所以,建议还是尽量在函数内部使用局部变量,这样代码会更清晰、更易于维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值