作用域、局部和全局变量-Day3
一、概述
程序语言中需要声明变量,变量的作用范围称为作用域,根据作用域的不同又分为:
- 局部变量
- 全局变量
二、局部变量和全局变量
1、局部变量:指局部生效,定义在函数模块内的变量只能在函数里面生效,函数模块之外无法使用。这个函数就是这个变量的作用域。
示例代码
def change_name(name):
print("before change: ",name)
name='SZK' #这个函数就是这个变量的作用域
print("after change: ",name)
name = "wesley"
print("---------调用change_name---------")
change_name(name)
print("---------打印name---------")
print(name)
#返回值:
---------调用change_name---------
before change: wesley
after change: SZK #局部变量生效
---------打印name---------
wesley
2、全局变量
全局变量,在整个程序中而不是函数中生效的变量,在代码的顶层声明。
示例代码:
school="Oldboy edu" #定义全局变量
def test_1():
print("school:",school)
def test_2():
school='Alex python' #定义局部变量
print("school:",school)
print("-------test_1-------")
test_1()
print("-------test_2-------")
test_2()
#返回值:
-------test_1-------
school: Oldboy edu #全局变量
-------test_2-------
school: Alex python #局部变量
从上面的例子可以看出全局变量的优先级低于局部变量,当函数模块内没有局部变量,才会去找全局变量。那如果想要将局部变量声明成全局变量呢?
示例一:将局部变量声明为全局变量
school="Oldboy edu"
def test_1():
global school
school='Alex python'
print("school:",school)
print("-------打印局部变量-------")
test_1()
print("-------打印全局变量-------")
print("school: ",school)
#返回值:
-------打印局部变量-------
school: Alex python
-------打印全局变量-------
school: Alex python #局部变量声明成全局变量
示例二:直接将函数中的局部变量声明成全局变量
def test_1():
global school
school='Alex python'
print("school:",school)
print("-------打印局部变量-------")
test_1()
print("-------打印全局变量-------")
print("school: ",school)
#返回值:
-------打印局部变量-------
school: Alex python
-------打印全局变量-------
school: Alex python
这两种方式都是可以的,但是不建议这样做,最好不要用global关键字。
示例三:将列表声明为全局变量,进行修改操作
list = ['name','jesus']
def test_1():
list[1]='God'
print(list)
print("-------打印局部变量-------")
test_1()
print("-------打印全局变量-------")
print(list)
#返回值:
-------打印局部变量-------
['name', 'God']
-------打印全局变量-------
['name', 'God']
从方法三可以看出,列表list被声明成全局变量,同时被重新赋值了。字符串和整数是不可以修改的,如果需要修改,需要在函数里面声明global;但是其他的数据类型,如列表(list)、字典(dict)、集合(set),包括我们后面即将要学的类(class)都是可以修改的。
三、总结:
- 在函数中定义的变量称为局部变量,在程序顶层定义的变量称为全局变量
- 全局变量的作用域是整个程序,局部变量的作用域是定义该变量的函数
- 当全局变量和局部变量同名时:在定义局部变量的函数中,局部变量起作用;在其他地方,全局变量起作用

浙公网安备 33010602011771号