blog/docs/code/python/range.md

157 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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重新赋值
```