一般来说,作为常量放在文件最开头,或者最外面的变量,是属于全局变量(静态变量),一般最好不要轻易改动他的取值,不管是在函数里,还是在主程序中。
其实如果不使用关键字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关键字。