在最外部声明函数,被视为全局变量。
a = 1
def func1():
print(a) # 可引用全局变量a
def func2():
print(a) # 可引用全局变量a
func2()
func1()
print(a) # 可引用全局变量a
注意:
1,最外部声明的变量,在函数内只可以对该变量进行引用,不可对该变量赋值,一旦执行赋值操作,则该变量视为局部变量,就会与外部变量冲突。
global
作用:
1,对局部变量声明为全局变量,一旦声明为全局变量,则该模块内任意地方都可以被引用。
一般用于函数这种局部区域内,且仅对当前函数区域内做赋值操作有效,不对内嵌在当前函数的子函数做赋值操作有效。
2,一旦对局部变量声明为全局变量,则该变量和外部变量视为引用同一个内存地址,也就是同一个变量。
以下是global对内嵌函数无效:
a = 1
def func1():
global a
a += 1
print(a)
def func2():
a += 1 # 报错 UnboundLocalError: local variable 'a' referenced before assignment
print(a)
func2()
print(func2.__globals__)
global对函数之间作用
def test4():
# global关键字作用
global func_var
func_var = 2
# 调用test5可以打印 func_var,去掉global会报错。
test5()
print(test5.__globals__)
def test5():
print(func_var)
test4()
在函数test4声明了func_var为全局变量,函数test5也可以对func_var变量进行引用。(要注意,只能是引用,一旦在函数test5执行赋值操作,就会报错。)
总结:(关键字:global,全局变量,引用操作,赋值操作)
1,一旦global声明为全局变量,仅支持该模块下任意地方对该全局变量引用。
2,但是不支持对该变量作为全局变量来赋值操作。因为一旦赋值操作,就被重新视为局部变量,除非每一个地方都重新声明global为全局变量,就可以在任意地方进行赋值,但是没有这个必要,因为可以通过传参。