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