全局变量和局部变量
全局变量:在程序的一开头就定义的变量叫作全局变量
局部变脸:在子程序中定义的变量叫做局部变量
区别
全局变量的作用域为整个程序,局部变量的作用域为改变量的字程序.
若全局变量和局部变量重命时,在定义局部变量的子程序内,局部变量起作用,其他地方则是全局变量起作用
name = '全局name'
def jubu():
name = '局部name'
print(name)
jubu() #运行的是jubu方法里的内容,所以打印的是局部name
print(name) #这个直接打印的是全局name
运行结果
局部name
全局name
global的用法
如果需要在函数内部改变函数外部的变量,就可以通过在函数内部声明变量为global变量。这样当程序运行至global变量便会替换外部的同名变量
name = '全局name'
def jubu():
global name
name = '局部name'
print(name)
jubu()
print(name)
运行结果
局部name
局部name
nonlocal
nonlocal
只在闭包里面生效,作用域就是闭包里面的,外函数和内函数都影响,但是闭包外面不影响
name ='全局name'
def bianliang():
name = '我是你爸'
def bianliang1():
nonlocal name #指定上一级变量 相当于把上级变量name = '我是你爸'替换成 name = '呵呵'
name = '呵呵'
bianliang1()
print(name)
print(name)
bianliang()
print(name)
运行结果
全局name
呵呵
全局name
函数即变量
可以把函数看成一个大的字符串,程序在运行时会先加载定义的函数再运行,否则会报错如下
def action():
print('in the action')
logger()
action()
def logger():
print ('in the logger')
运行结果
NameError: name ‘logger’ is not defined
正确的应该是如下形式
def action():
print('in the action')
logger()
def logger():
print ('in the logger')
action()
#或者是
def action():
print('in the action')
logger()