全局变量&局部变量
根据变量作用域(变量生效范围)主要分为全局和局部变量。
1、定义与作用域
全局变量:在函数体内、外都能生效的变量,既能在一个函数中使用,也能在其他函数中使用。
作用域:能够在所有的函数中进行访问。
![a77f9f6cff3704cf2ea68241e258d5c4.png](https://i-blog.csdnimg.cn/blog_migrate/784af95c7fe11c01eb92f2638d5f1758.png)
局部变量:在函数体内部的变量,即只在函数体内部生效,函数外部是不能使用的,当函数调用结束后会被自动删除失效。
作用域:作用范围只是在某一个函数体内部,调用完就会被自动删除,所以不同的函数可以定义相同名字的变量。
![111d8873a7d08404497b7620c6dd92bd.png](https://i-blog.csdnimg.cn/blog_migrate/ceb36d0fbf3fad56a81f23abe6208c49.png)
2、两者关系
1 | 局部变量——>全局变量:NO ![]() 备注:这里函数体内x=2虽然与全局变量x=1是同名,但是x=2只是函数体内的一个局部变量,并没有被修改成全局变量。全局变量仍是x=1。 |
2 | 全局变量——>局部变量:YES ![]() 备注:使用global函数可以声明x是全局变量,至此之后,x=1的全局变量已经被修改成x=2,局部变量x=2也成为了全局变量。 |
测试题:
以下输出结果是什么?
i=1
def func():
i=i+1
print(i)
show()
答案:程序报错
解析:首先明确,全局变量和局部变量都是i。函数体内的“i=i+1”左侧i是在定义变量,它会在函数体内寻找右侧的i+1来等待被赋值,然而右侧的i又在等左侧的i被定义,因此出现“左侧i等待被赋值,右侧i等待被定义”的结果,导致程序报错。
正确方式有2种:第一种是修改函数体内的变量名,与全局变量不同,这样函数就能识别出全局变量;第二种是在函数体内重新定义i。
总结:尽量不要出现全局和局部变量名同名的情况。