专栏名称: Coderfei
前端
目录
相关文章推荐
晨明的策略深度思考  ·  【广发策略】躁动主线明确、但低位成长也有黄金 ·  3 天前  
51好读  ›  专栏  ›  Coderfei

python中全局变量和局部变量详解

Coderfei  · 掘金  ·  · 2020-02-11 02:37

正文

阅读 15

python中全局变量和局部变量详解

写在最前面:

python中全局变量和局部变量的最大区别在于局部变量只能通过函数去访问,而全局变量可以直接访问。

!!!

我们先来看一个最简单的例子,事实上这并不是一个真正的全局变量,只是在类中的一个变量。

!!!

我们先从类中的变量访问开始讲起 那么我们要如何访问这个变量呢?

class variable:
    a = '我是类变量'
 
    def showvarible(self):
        b = '我是函数变量'
        print(a)
        print(b)
 
 
variable().showvarible()复制代码

毫无疑问,编译器就已经报错了,这是因为类中的变量不可以在函数中直接访问,应该这样

class variable:
    a = '我是类变量'
 
    def showvarible(self):
        b = '我是函数变量'
        print(variable.a)
        print(b)
 
 
variable().showvarible()复制代码

我是类变量
我是函数变量复制代码

其实我们还可以通过self去访问

class variable:
 
    a = '我是类变量'
 
    def showvarible(self):
        b = '我是函数变量'
        print(self.a)
        print(b)
 
 
variable().showvarible()复制代码


结果是一样的

我是类变量
我是函数变量复制代码

还可以怎么做呢,我们通过构造函数给定一个参数,类中可访问

class variable:
 
    def __init__(self,a):
        self.a = '我是类变量'
 
    def showvarible(self):
        b = '我是函数变量'
        print(self.a)
        print(b)
        
 
 
variable(1).showvarible()复制代码

我是类变量
我是函数变量复制代码

这里需要注意的是,实例化的时候必须给参数,由于python是动态语言,不需要指定参数的类型,你可以放int,比如1,也可以给一个字符串。

然后我们真正看一下全局变量

a = '我是真正的全局变量'
 
 
def showvariable():
    b = '我一直都是局部变量'
    print(a)
    print(b)
 
 
showvariable()复制代码

我是真正的全局变量
我一直都是局部变量复制代码

当我们试图在函数外访问这个函数的局部变量时

a = '我是真正的全局变量'
 
 
def showvariable():
    b = '我一直都是局部变量'
    print(a)
 
def showb():
    print(b)
 
 
showvariable()复制代码

报错

我是真正的全局变量
Traceback (most recent call last):
  File "F:/leetcode/xxx.py", line 13, in <module>
    showb()
  File "F:/leetcode/xxx.py", line 9, in showb
    print(b)
NameError: name 'b' is not defined复制代码

说明局部变量只能在局部使用。

那么不巧的是,我的局部变量和全局变量定义了同一个名称,谁的优先级更高呢?

a = '我是真正的全局变量'
 
 
def showvariable():
    a = '我一直都是局部变量'
    print(a)
 
 
print(a)
showvariable()复制代码

果然,函数优先使用了局部变量

而优先级还有一个体现,来看下面的例子

a = 3
 
 
def showvariable():
    a = a * 5
    print(a)
 
 
showvariable()复制代码

你可能会认为输出15,但是上面的一个例子告诉我们,在函数内会优先使用局部变量

3
Traceback (most recent call last):
  File "F:/leetcode/xxx.py", line 10, in






请到「今天看啥」查看全文