python函数全局变量与局部变量

局部变量:在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用
全局变量:在一个文件顶部定义的变量可以供该文件中任意函数调用

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

复制代码
name='全局变量'
def change_name():
     name='局部变量'
     print('change_name',name)

change_name()
print(name)
复制代码

输出:

change_name 局部变量
全局变量

 

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

复制代码
NAME = "xixi"

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

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

s1()
s2()
复制代码

输出:

打印出 yueyue
打印出 yueyue

 

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

复制代码
NAME = ["wangwang","shishi"]

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

s1()
复制代码

输出:

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

 

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

函数跟函数之间嵌套变量

复制代码
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

 

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

复制代码
name = "全局变量"

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

    ss1()
    print(name)

print(name)
s1()
print(name)
复制代码

输出:

全局变量
月月
全局变量

 

慢性拆分详解

复制代码
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
全局变量

你可能感兴趣的:(python)