Python疑惑之全局变量和局部变量的若干问题

全局变量与局部变量

从字面意义也可发现全局是针对全部的,而局部变量是针对部分的也就是局部。

一、变量、函数等等都必须先声明后调用,如:

1、 print(NAME)
    NAME = "alex"


2、test()    
   def test()
        pass

以上都是错误的,违反先声明后调用原则。

二、全局变量与局部变量的判断

三、global与nonlocal

无缩进可以声明全局变量,global可以在任何位置定义全局变量,有缩进的为局部变量,另外还有nonlocal定义局部变量,但也可理解为介于全局与局部变量之间的。如

四、怎么找变量的值,遵循”就近“原则

本级有,用本级的,本级没有找上一级的,直到找到为止,否则报错。如看两段代码执行结果

NAME = ['ab','cd']
def test1():
    NAME = "erbi"
    def test():
        nonlocal NAME
        NAME = "sb"
        print(NAME)
    test()
    print(NAME)
print(NAME)
test1()
print(NAME)
NAME = ['ab','cd']
def test1():
    NAME = "erbi"
    def test():
        nonlocal NAME
        NAME = "sb"
        print(NAME)
    test()
    print(NAME)
print(NAME)
test1()
print(NAME)

注意两个执行结果的区别

五、局部变量无法修改全局变量,但可追加、删除,但只针对可变类型如list,dict

NAME = ['ab','cd']
def test1():
    def test():
        NAME.append("sb")
        print(NAME)
    test()
    print(NAME)
print(NAME)
test1()
print(NAME)

注:变量和函数是全局还是局部,关键是看定义的位置而不是被调用的位置

name='root'
def out(func):
    name='jordan'
    def inner():
        print(name)
        func()
    return inner

def show():
    print(name)

out(func)()
结果为:jordan,root

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值