Python全局变量和局部变量(超详细,纯干货,保姆级教学)

全局变量定义:

                        在函数外部定义的变量。所有函数内部都可以使用这个变量。

局部变量定义:

                        在函数内部定义的变量。这个变量只能在定义这个变量的函数内部使用。

第一种:global定义全局变量在自定义函数内部

定义看起来一愣一愣的,没关系我也是。我将会用实例的方式为你解释。我们也知道在Python中有一个global关键字用来声明一个全局变量。那这玩意儿到底什么用。来看看

def first():
    global key
    key="first()的key"
    print("进入first函数,给key赋新值,此时print(key)得到***"+key+"***\n")
def second():
    print("进入second函数,但是没有给key赋新值,此时print(key)得到***"+key+"***\n")
def third():
    key="third()的key"
    print("进入third函数,给key赋新值,此时print(key)得到***"+key+"***\n")

first()
second()
third()

******最后的到运行结果如下******

结论:上面例子说明了 global 定义 全局变量,用在 自定义函数 的时候,是在 所有自定义函数 内部 通用的 变量。而在全局中,它并不存在。。

(但是要注意,这个global key是在函数内部定义的,没有在全局内定义,所以,如果你在上面我写的代码后面在加一个print(key)的话,会爆出“key未定义”的警告。)

                 **********************分割线***************************

第二种:全局定义全局变量,并给其赋值。

(注:在全局内写“key="值"相当于在全局内写“global key

                                                                           key="值"”)

key="全局内定义,并赋值的全局变量key"

def first():
    key="first()局部新定义的“全局key“"
    print("进入first函数,key的值为***"+key+"***\n")
def second():
    print("进入second函数,在second函数内部,不赋给key新值,引用first()函数后的key为***"+key+"***\n")


print("没有引用first()函数时的key为***"+key+"***\n")#为了先print出key的全局内定义的 全局变量值

first()#first()函数内部对全局内定义的 全局变量key 进行了赋值。实质上是在first()内部定义了一个局部变量

second()#验证这个 first()内部定义的局部变量会不会影响到second()中的key。(就像第一种global key那样。结论当然是否定的。但我们这里验证一下,消除一下读者的疑问)

print("引用first()函数后的key为***"+key+"***\n")#验证在 first()定义了一个局部变量之后,会不会影响到全局内的全局变量key。(答案当然也是否定的,这里这一步也是为了消除读者的疑问)

********运行结果如下********

 

 可见,以上例子中。first()内定义了一个局部变量,然后出了这个first()函数以后,这个变量便消失,不可再用。同时也体现了“局部变量>全局变量”的优先级关系。

结论:在全局 定义 全局变量 key 后,自定义函数 内部 再对这个  key 进行定义 的时候,就是定义了 key局部变量,出了这个 自定义函数,便不可再用。下一个自定义函数 只能用 全局变量key 了。

                 **********************分割线***************************

第三种:前两种的混用

key="全局内定义,并赋值的全局变量key"

def first():
    key="first()局部新定义的“全局key“"
    print("进入first函数,key的值为***"+key+"***\n")
def second():
    print("进入second函数,在second函数内部,不赋给key新值,引用first()函数后的key为***"+key+"***\n")
def third():
    global key
    key="third()新定义的自定义函数内部通用global key"
    print("进入third函数,在third函数内部,赋给key新值,且为global,引用third()后的key为***"+key+"***\n")

print("没有引用first()函数时的key为***"+key+"***\n")#与第二种的这个位置的作用一样
first()#与第二种的这个位置的作用一样
second()#与第二种的这个位置的作用一样

third()#由于我们给third()内部定义了一个global key,探测一下等下再调用second()的时候会不会使其变成自定义函数内部通用的“全局变量”,即 第一种 的结论。

second()#见上一步解释(经验证,即输出结果,上一步的猜测是正确的)

print("引用third()函数后的,全局内的key为***"+key+"***\n")#探测一下自定义函数内部global key会不会影响 全局内的key。(答案当然是否定的,就是为了消除一下读者的疑问,证明一下结论的严谨性)

********运行结果如下********

 因此,我们严谨的证明了 第一种 和 第二种 的结论

(如有不足或错误,敬请指正)

物联沃分享整理
物联沃-IOTWORD物联网 » Python全局变量和局部变量(超详细,纯干货,保姆级教学)

发表评论