Python入门--局部变量,全局变量,作用域,LEGB规则

#变量的作用域-->程序代码能访问该变量的区域。变量可以被访问的范围。变量发挥作用的范围。
#根据变量的有效范围,可分为
#局部变量
#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转为字符串
'''

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值