码迷,mamicode.com
首页 > 编程语言 > 详细

python全局变量与局部变量

时间:2019-11-01 22:48:43      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:出错   错误   png   例子   答案   ima   技术   mic   com   

了解全局变量和局部变量之前,我们先来了解一下作用域

a = 10
def func():
  b = 20
  def inner():
    c = 30

以上面这个程序为例:打印a,b,c

  技术图片

 

可以看到只有a打印 10 ,b和c都报错,这就是作用域的问题。

 

我们把新创建的一个.py文件看做事一个模块,在模块内定义的变量,如a,就是这个模块的全局变量,作用于全局,不论在哪都可以调用,

但是b和c 是定义在函数内部的,我们叫做局部变量,只能作用在函数内部。

技术图片

我们在看一个问题

  func和inner函数可以调用变量a 么?

  func函数可以调用变量c么?

 

答案是:a是全局变量,可以在任意地方调用

      技术图片

 

 但是func函数不可以调用c,这时候我们把func看做一个整体,那么inner就是在func内部定义的函数,c也就是inner内部的变量

 技术图片

 

 

总结:变量定义在全局可以在任何地方调用,定义在函数内部,只能在函数内使用。

变量查找顺序:LEGB

局部作用域>外层作用域>当前模块中全局>python内置作用域;

 

 

在来说关于全局和局部变量的两个两个方法:globalnonlocal

 

直接上例子吧:

技术图片

 

 我们可以看到,局部定义了a, 那么我们直接调用a就会报错,

只有在定义后调用才会打印,并且全局变量的a值不会改变

技术图片

 

 如果我现在想在局部名称空间改变a的值该怎么做呢?这时候就要用到global

技术图片

 

 

我们可以看到,全局变量a的值已经修改成15了。

 

下面来说nonlocal:

 

技术图片

 

 

我们看到这时候打印a、b的时候出错了,错误提示是没有定义b

 

但是a没有报错,这是因为a是全局变量,而b是局部变量,所以出现了这种错误,改正如下:

 

技术图片

 

 因为b是局部变量,所以调用之前用nonlocal声明,之后就可以调用了。

 

python全局变量与局部变量

标签:出错   错误   png   例子   答案   ima   技术   mic   com   

原文地址:https://www.cnblogs.com/python-Arvin/p/11779683.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!