#变量的作用域-->程序代码能访问该变量的区域。变量可以被访问的范围。变量发挥作用的范围。
#根据变量的有效范围,可分为
#局部变量
#1,在函数内定义并使用的变量,只在函数内部有效,
# 局部变量使用global声明,这个变量
#就会成全局变量
#全局变量
#函数体外定义的变量,
# 可作用于函数内外
####################################
def fun(a,b):
c=a+b#c,就称为局部变量,因为c是在函数体内定义的变量
#a,b为函数的形参,作用范围也是函数内部,相当于局部变量
print(c)
'''print(a)
print(c)
报错
因为a,c超出了起作用的范围(超出了作用域)'''
##################################
#在函数外定义的变量,在函数内外都可以使用,称为全局变量
name='周周'#name在函数内外都可以使用,称为全局变量
print(name)
def fun1():
print(name)
fun1()
#############################################
######################################################
def fun2():
global age
age=24
print(age)
fun2()
print(age)#局部变量使用global声明,就变成了全局变量,在函数调用完后,可在函数体外使用
##############################################################
#############################################################
'''
如果在函数内存在一个跟,全局变量一摸一样的局部变量
'''
x=880
def myfun():
x=520#在函数内部存在一个跟全局变量一样的一个局部变量,都叫x
print(x)#当局部作用域与全局作用域发生冲突的时候,python会使用局部作用域的变量
myfun()#520
print(x)#880
'''
调用myfun输出的是520
输出x输出880
不难发现,在函数中局部变量会覆盖同名的全局变量,
但是只要出了函数,局部变量就失效了,因此打印的就是全局变量的值
'''
x=880
print(id(x))#2426335684912
def myfun():
print(id(x))#2426335684912
myfun()#全局变量可以在函数内被访问到
def myfun():
x=520
print(id(x))#3079448521552
myfun()
###############################################################
#global方法不提倡
x=880
def myfun():
global x#声明x是全局变量,在这里面出现的x就是全局变量的那个x,
x=520
print(x)
myfun()#520
print(x)#520
##########################################################
'''
嵌套函数
'''
def funA():
x=520
def funB():
x=880
print('in funB x=',x)
funB()#内部函数只能通过外部函数来调用
print('in funA x=',x)
'''
内部函数是无法被直接调用的
内部函数只能通过外部函数来调用
'''
'''
以下语句会报错
funB()
'''
funA()#in funB x= 880 in funA x= 520
'''
内部函数可以访问到外部函数的变量,但却无法修改外部函数变量的值,外部函数输出的x还是520
'''
################################################
#############################################
'''
使用nonlocal语句,在内部函数修改外部函数的变量
'''
def funA():
x=520
def funB():
nonlocal x
x=880
print('in funB x=',x)
funB()#内部函数只能通过外部函数来调用
print('in funA x=',x)
funA()#in funB x= 880 in funA x= 880
#################################################
#######################################################
'''
LEGB规则:L>E>G>B
L(Local):局部作用域(变量)
E(Enclosed):嵌套函数的外层函数作用域
G(Global):全局作用域
B(Build-In):内置作用域
当局部作用域与全局作用域发生冲突的时候,python
'''
'''
以下代码会报错
str='内置函数str被毁了'
str(520)#将520转为字符串
'''
Python入门--局部变量,全局变量,作用域,LEGB规则
于 2022-02-27 22:58:38 首次发布