局部变量和全局变量
a = "Life is short,you need Python"
def func1():
print(a)
def func2():
#global b
b = "人生不如意事十之九八,可与人言者并无二三"
print(b)
func1()
func2()
print(a)
print(b) # NameError: name 'b' is not defined
#global b print(b) #做出声明,此时打印就不会再报错了
局部变量:在函数内部定义的普通变量,只在函数内部作用,函数执行结束变量会自动删除,函数执行结束后,函数执行结束后,函数内部的局部变量,会被系统回收
全局变量:定义在函数外的拥有全局作用域,全局变量可以在整个程序范围内访问
全局变量与局部变量两者的本质区别就是在于作用域:全局变量是在整个py文件中声明,全局范围内都可以访问,局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就报错
global关键字与 nonlocal关键字
a = "Life is short,you need Python"
def func1():
print(a)
def func2():
#global b
b = "人生不如意事十之九八,可与人言者并无二三"
print(b)
func1()
func2()
print(a)
print(b) # NameError: name 'b' is not defined
#global b print(b) #做出声明,此时打印就不会再报错了
a = "Life is short,you need Python"
def func1():
a = "生而为人,我感到抱歉"
print (a)
def func2():
print(a)
func1() #此时证明局部变量优先于全局变量
func2()
print(a) #无论你在函数内怎样改动这个函数的值,只有在函数内生效,对全局来说是没有任何影响的
a = 6 # 定义全局变量a
def func():
#global a
a = a * 3
print (a)
func()
在python的函数中=号左边表示定义了一个局部变量,待赋值,而上面的例子中就相当于你定义了一个局部变量a,但你还没赋值就拿来进行运算,自然就会报错了。
def func():
global a # 利用global关键词定义全局变量
a= "Life is short,you need Python"
print (a)
#print(a) #打印时候报错 global定义全局变量的时候不能同时赋值,要在下一行才能赋值,其次,在函数中定义了全局变量后,要这个函数执行了,全局变量才生效
func() #调用函数不报错
def func1():
a = "Life is short,you need Python"
def func2():
nonlocal a # 使用nonlocal不是局部变量
a = a * 3
print(a)
return func2()
func1()