blog/docs/code/python/range.md

3.4 KiB
Raw Permalink Blame History

title date tags categories author
变量作用域 2020-09-19 17:25:10
Python
Python
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 > 10while 中的语句并没有被执行,此时 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)

在第二个例子中,在函数内 使用 globalmsg 声明为全局变量,此时就可以对全局变量进行修改。

响应结果

---------------
这是一个全局变量
给msg重新赋值
给msg重新赋值