Python中全局变量与局部变量

1.定义

局部变量:在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用

全局变量:在一个文件顶部定义的变量,可以供该文件中任意函数调用

全局变量与局部变量两者的本质区别就是在于作用域。全局变量是在整个py文件中声明,全局范围内都可以访问。局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就爆掉了

如果在函数内部定义与某个全局变量一样名称的局部变量,就可能会导致意外的效果,可能不是你期望的。因此不建议这样使用,这样会使得程序很不健全

2.实例

2.1 优先读取局部变量,能读取全局变量,无法对全局变量重新赋值

name='全局变量'
def change_name():
     name='局部变量'
     print('change_name',name)

change_name()
print(name)

输出:

chang_name 局部变量

全局变量

2.2global语句可以把局部变量强制生成全局变量,如果函数没有被调用的话 global是没有用的

NAME = "xixi"

def s1():
     global NAME            #已经声明,NAME就是全局的那个变量xixi
     NAME = "yueyue"        #修改全局的变量为yueyue
     print('打印出', NAME)

def s2():
     print('打印出', NAME)

s1()
s2()

输出:

打印出 yueyue
打印出 yueyue

2.3 对于可变类型,可以对内部元素进行操作

NAME = ["wangwang","shishi"]

def s1():
     NAME.append('yaoyao')
     print('打印出', NAME)

s1()

打印出 ['wangwang', 'shishi', 'yaoyao']

######## 全局变量变量名大写
######## 局部变量变量名小写

2.4 函数跟函数之间嵌套变量

NAME = '全局变量'          #第一步执行

def s1():
     name = "嵌套1"        #第三步执行
     print(name)            #第四步执行(输出第一行)
     def s2():
         name = "嵌套2"    #第六步执行
         print(name)        #第七步执行(输出第二行)
         def s3():
             name = '嵌套3' #第十步执行
             print(name)     #第十一步执行(输出第四行)
         print(name)         #第八步执行(输出第三行)
         s3()                #第九步执行
     s2()                    #第五步执行
     print(name)             #第十二步执行(输出第五行)

s1()                         #第二步执行
复制代码

输出:

嵌套1
嵌套2
嵌套2
嵌套3
嵌套1

2.5 nonlocal指定上一级变量,如果没有就继续往上直到找到为止

name = "全局变量"

def s1():
    name = "西西"
    def ss1():
        nonlocal name   #把上一级变量name=西西改为name=月月
        name = "月月"

    ss1()
    print(name)

print(name)
s1()
print(name)

输出:

全局变量
月月
全局变量

2.6 属性拆分详解

name = '全局变量'          #第1步执行

def s1():                  #第2步执行
     name = "嵌套1"        #第4.1步执行
     print(name)            #第4.2步执行(输出第二行)
     def s2():              #第4.3步执行
         name = "嵌套2"    #第4.4.1步执行
         print(name)        #第4.4.2步执行(输出第三行)
         def s3():          #第4.4.3步执行
             name = '嵌套3' #第4.4.5.1步执行执行
             print(name)     #第4.4.5.2步执行(输出第五行)
         print(name)         #第4.4.4步执行(输出第四行)
         s3()                #第第4.4.5步执行步执行
     s2()                    #第4.4步执行
     print(name)             #第4.5步执行(输出第六行)

print(name)                  #第3步执行(输出第一行)
s1()                         #第4步执行
print(name)                  #第5步执行(输出第七

输出:

全局变量
嵌套1
嵌套2
嵌套2
嵌套3
嵌套1
全局变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值