首页技术文章正文

什么是局部变量?什么是全局变量?

更新时间:2021-11-12 来源:黑马程序员 浏览量:

IT培训班

Python变量并不是在哪个位置都可以访问的,具体的访问权限取决于变量定义的位置,其所处的有效范围视为变量的作用域。根据作用域的不同,变量可以划分为局部变量和全局变量。本节将针对局部变量和全局变量进行详细地讲解。

1.局部变量

在函数内部定义的变量称为局部变量,局部变量只能在定义它的函数内部使用。

例如,定义一个包含局部变量count的函数test(),在函数的内部和外部分别访问变量count,代码如下:

def test():
count=0                                #局部变量
print (count)                          #函数内部访问局部变量
test()                                 #函数外部访问局部变量
print(count)

执行程序,程序执行的结果如下:

0
Traceback (most recent call last):
File "C:/Osers/admin/FycharmProjects/测试/func.py",line 6,in <module>
print (count)
NameError: name 'count' is not defined

以上程序在打印count的值之后又打印了错误信息“name 'count'is not defined”由此可知,函数中定义的变量在函数内部可使用,但无法在函数外部使用。

局部变量的作用域仅限于定义它的代码段内,在同一个作用域内,不允许出现同名的变量。


2.全局变量

全局变量是指在函数之外定义的变量,它在程序的整个运行周期内都占用存储单元。默认情况下,函数的内部只能获取全局变量,而不能修改全局变量的值。例如,将前面定义的test()函数进行调整,如下所示:

count - 10            #全局变量
def test():
count=11              #实际上定义了局部变量,局部变量与全局变量重名
print (count)
test ()
print(count)

以上代码中首先在test()函数外定义了一个全局变量count,其次在该函数的内部尝试为count 重新赋值,然后在函数的内部访问了变量count,最后在执行完函数后访问变量count。

执行程序,程序执行的结果如下:

11
10

从以上结果可知,程序在函数test()内部访问的变量count为11,函数外部访问的变量为10。也就是说,函数的内部并没有修改全局变量的值,而是定义了一个与全局变量同名的局部变量。

在函数内部若要修改全局变量的值,需要提前使用保留字global进行声明,语法格式如下:

global 全局变量

对以上定义的test()两数再次进行调整,在该函数中对全局变量count进行修改,具体代码如下所示:

count = 10                                #全局变量
def test ():
global count                              #声明count为全局变量
count += 10                               #函数内修改count 变量
print(count)
test()
print(count)
以上代码首先定义了变量count并赋值为10,其次在test()函数内部使用global保留字声明count为全局变量,然后重新给count 变量赋值并将其输出,最后在函数执行完以后再次输出。

执行程序,程序执行的结果如下:

20
20

观察执行结果,程序在函数内部和外部获得的变量count的值均为20。由此可知,在函数内部使用关键字global对全局变量进行声明后,函数中对全局变量进行的修改在整个程序中都有效。


LEGB法则:

Python中的作用城大致可以分为以下4种。

(1)L(local):局部作用域。

(2)E(enclosing):嵌套作用域fo

(3)G(global):全局作用域。

(4)B(built-in):内置作用域。

基于LEGB法则,搜索变量名的优先级是:局部作用域>嵌套作用域>全局作用域>内置作用域。当函数中使用了未确定的变量名时,Python会按照优先级依次搜索4个作用域,以此来确定该变量名的意义。首先搜索局部作用域(L),其次是上一层函数的嵌套作用域(E),然后是全局作用域(G),最后是内置作用域(B)。接照LEGB原则查找变量,在某个区拔内若找到变量,则停止继续查找;若一直没有找到变量,则直接引发NameError异常。






猜你喜欢:

在Postman中如何设置全局变量和环境变量?

postman全局变量和环境变量分别是什么?有什么区别?

Nginx rewrite常用全局变量详细介绍

黑马程序员Python+大数据开发开发工程师培训

分享到:
在线咨询 我要报名
和我们在线交谈!