Python中global关键字使用

一般来说,作为常量放在文件最开头,或者最外面的变量,是属于全局变量(静态变量),一般最好不要轻易改动他的取值,不管是在函数里,还是在主程序中。

其实如果不使用关键字global,函数也是可以改变全局变量的。请看下面的例子。

a=[1,2,3]
def add(x):
    a.append(100)
    return x

print(add(a))
print(a)    

输出:
在这里插入图片描述

a=[1,2,3]
def add(x):
    x.append(100)
    return x

print(add(a))
print(a) 
输出:

在这里插入图片描述
但是的例子是可变对象list,但如果是不可变对象,那么它根本就没有那些原地改变的方法,也就不可能在函数里面改变,从而改变外部的全局变量。详见下面例子。

a=100
def add(x):
    x=1000
    return x

print(add(a))
print(a)    

在这里插入图片描述

a=100
def add(x):
    a=1000
    return x

print(add(a))
print(a)    

在这里插入图片描述
这里的话,其实又可以延伸出另外一个知识点,python变量引用,以及重新赋值(或者叫绑定,该变量引用另外一个对象)的问题。关于这点网上其实有很介绍,python到底是传值还是传引用。但这里我想强调的重点是,对于重新绑定,就算是在函数里面对一个可变的全局变量(之前已绑定一个可变对象)进行重新绑定,它也不会对最终的全局变量造成影响。详见下面的例子。

a=[1,2,3]
def add(x):
    a=[100,200,300]
    return x

print(add(a))
print(a)    

在这里插入图片描述

a=[1,2,3]
def add(x):
    x=[100,200,300]
    return x

print(add(a))
print(a)    

在这里插入图片描述
其实这里不管是函数(函数也是一种特殊的类对象),python一切皆对象嘛。。上面的这些,从广义上面来讲,都可以用命名空间来解释,python中其实都是传递引用的,只是在不同命名空间会造成联系,或者屏蔽。。

那么如果我实在是想在函数里面修改全局变量呢,该如何做,这个时候global关键字就发挥作用了。。

num = 1
def fun():

     num = 123
     print(num)

fun()
print(num)

此时没有使用global关键字,无法对全局变量num进行修改,运行结果如下:
在这里插入图片描述

想要对全局变量进行修改,要用到关键字global!

扫描二维码关注公众号,回复: 5674991 查看本文章
#global关键字(内部作用域想要对外部作用域的变量进行修改)
num = 1
def fun():
     global num
     num = 123
     print(num)

fun()
print(num)

运行结果如下:
在这里插入图片描述

上面的关键字global,要先申明是全局的某个变量,再使用重新绑定。程序文件最开头的全局变量默认都是全局类型的,可加也可以不加global关键字。

猜你喜欢

转载自blog.csdn.net/edward_zcl/article/details/88831635