3.4 KiB
3.4 KiB
| title | date | tags | categories | author | ||
|---|---|---|---|---|---|---|
| 变量作用域 | 2020-09-19 17:25:10 |
|
|
Anges黎梦 |
变量作用域
变量定义之后,在程序中可以使用/访问的区域。
如果超出这个区域,则无法访问该变量。
一般,分为局部变量,和全局变量。
代码运行
代码在运行过程中,执行过的内容,所创建的变量在接下来的执行过程中可以调用。
若执行中产生分支,若两个分支变量不一致,不同分支创建了不同变量。
则只有执行过的分支中的变量会被创建。
局部变量
局部变量,是指在某一个区域内定义,并使用的变量,它只在区域内有效。
if 语句
if 语句中定义的变量,在执行之后生效。
示例代码:
if False:
a = 1
else:
print(a)
print(a)
在上述示例中,如果判断条件为False,那么去执行else中的代码。此时a并没有被定义,执行就会报错:
报错信息:
NameError: name 'a' is not defined
如果判断条件为True,那么执行if中的代码,此时a已经被定义,再执行print就不会报错。
while
while 语句中定义的变量,在执行之后生效。
示例代码:
a = 11
while a <=10:
a += 1
b = a
print(b)
在上述示例中,如果 a > 10,while 中的语句并没有被执行,此时 b 并没有被定义,执行就会报错:
报错信息:
NameError: name 'b' is not defined
若 a = 1,那么则去执行 while 中的代码。b 已经定义,则不会报错。
for
for 语句中定义的变量,在执行之后生效。(与if while相同)
示例代码:
o = 0
for i in range(0, 10):
o += i
print(i)
函数 def
示例代码:
def func_1():
# func_param = 0
# print(func_param) # 局部变量使用
# func_1()
# print(func_param) # 在函数外使用局部变量
上述示例中,func_param 为函数内定义的变量,在函数外是禁止使用。
报错信息:
NameError: name 'func_param' is not defined
全局变量
在文件全局任意位置都可以使用都变量
他们在任意位置都可以使用,但是不能直接在局部中修改。
例子一
示例代码:
msg = "这是一个全局变量"
def msg_print():
msg = "给msg重新赋值"
print(msg)
msg_print()
print(msg)
在上述例子中,msg 为全局变量,我们在函数内定义一个 msg变量,给他赋不同的值。 查看输出结果可以发现,全局变量并没有被改变。 这里只是全局和局部两个变量定义了同一个名字而已。
响应结果:
输出结果
给msg重新赋值
这是一个全局变量
例子二
示例代码:
print("---------------")
msg = "这是一个全局变量"
print(msg)
def msg_print_1():
global msg # 把msg声明为全局变量
msg = "给msg重新赋值" # 对全局变量msg的修改
print(msg)
msg_print_1()
print(msg)
在第二个例子中,在函数内 使用 global 把 msg 声明为全局变量,此时就可以对全局变量进行修改。
响应结果:
---------------
这是一个全局变量
给msg重新赋值
给msg重新赋值