代码改变世界

Python--局部变量与全局变量

2016-12-25 00:07  ZN23&24  阅读(147)  评论(0)    收藏  举报

局部变量与全局变量

1.什么是全局变量

  在globals中的变量,都是全局变量,全局变量的作用域就是整个程序

2.什么是局部变量

  顾名思义就是只能在局部可以执行的变量,在子程序中定义的变量就称为局部变量,局部变量的作用域是定义该变量的子程序。

3.当全局变量与局部变量同名时:

  在定义局部变量的子程序中,局部变量生效,在其他地方全局变量生效。

4.定义全局变量和局部变量的命名规法

      1、全局变量变量名必须大写

      2、局部变量变量名必须小写

      3、全局变量必须写在局部变量的上面,并且顶格写。

 

ps1:

复制代码
1 name= 'lhf'
2 
3 def change_name():
4     print('我的名字',name)
5 
6 change_name()
复制代码

执行结果:

1 我的名字 lhf

 

ps2:

复制代码
1 name= 'lhf'
2 def change_name():
3     name='帅了一笔'
4     print('我的名字',name)   #局部变量直接从里层开始读
5 
6 change_name()
7 print(name)
复制代码

执行结果:

1 我的名字 帅了一笔
2 lhf

 

ps3:

复制代码
1 name= 'lhf'
2 def change_name():
3     global name      #global全局变量,从最外层开始读,再读里层
4     name='帅了一笔'
5     print('我的名字',name)
6 
7 change_name()
8 print(name)
复制代码

执行结果:

1 我的名字 帅了一笔
2 帅了一笔

 

ps4:

复制代码
 1 NAME = "杠娘"
 2 
 3 def yangjian():
 4     # NAME = "史正文"
 5     global NAME
 6     NAME = "小东北"
 7     print('我要搞', NAME)
 8 
 9 def qupengfei():
10     # NAME = "基"
11     print('我要搞', NAME)
12 
13 yangjian()
14 qupengfei()
复制代码

执行结果:

1 我要搞 小东北
2 我要搞 小东北

 

ps5: global声明全局变量,就从最上面开始往下一层一层读取

复制代码
 1 NAME = "产品经理"
 2 
 3 def yangjian():
 4     # NAME = "史正文"
 5     global NAME # 已经声明,NAME就是全局的的那个变量
 6     print('我要搞', NAME)
 7     NAME = "小东北"  # 修改 全局的变量
 8     print('我要搞', NAME)
 9 
10 def qupengfei():
11     NAME = "基"
12     print('我要搞', NAME)
复制代码

执行结果:

1 刚娘
2 冷静
3 刚娘

 

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

复制代码
 1 name = "刚娘"
 2 
 3 def weihou():
 4     name = "陈卓"
 5     def weiweihou():
 6         nonlocal name   # nonlocal,指定上一级变量,如果没有就继续往上一直到找到为止
 7         name = "冷静"
 8     weiweihou()
 9     print(name)
10 print(name)
11 
12 weihou()
13 print(name)
复制代码

执行结果:

1 刚娘
2 冷静
3 刚娘

全局变量和局部变量有无global关键字的区别

一、 如果函数的内容无global关键字

 1、有声明局部变量

1 NAME = ["产品经理","廖波诗"]
2 def qupengfei():
3     NAME = "自己"
4     print('我要搞',NAME)
5 qupengfei()

执行结果:

1 我要搞 自己

 

2、无声明局部变量

1 NAME = ["产品经理","廖波诗"]
2 def qupengfei():
3     NAME.append('XXOO')
4     print('我要搞',NAME)
5 qupengfei()

执行结果:

1 我要搞 ['产品经理', '廖波诗', 'XXOO']

 

 二、如果函数的内容有global关键字

1、有声明局部变量

1 NAME = ["产品经理","廖波诗"]
2 def qupengfei():
3     NAME = "自己"
4     print('我要搞',NAME)
5 qupengfei()

执行结果:

1 我要搞 自己

 

2、无声明局部变量

复制代码
1 NAME = ["产品经理","廖波诗"]
2 def qupengfei():
3     global NAME
4     NAME = ["阿毛"]
5     NAME.append('XXOO')
6     print('我要搞',NAME)
7 qupengfei()
复制代码

执行结果:

1 我要搞 ['阿毛', 'XXOO']

 

全局变量和局部变量的总结:

1、优先读取局部变量,能读取全局变量,无法对全局变量重新赋值 NAME=“fff”,

2、但是对于可变类型,可以对内部元素进行操作

3、如果函数中有global关键字,变量本质上就是全局的那个变量,可读取可赋值 NAME=“fff”

ps1:

复制代码
 1 NAME = ["产品经理","廖波湿"]
 2 
 3 def yangjian():
 4     # NAME = "史正文"
 5     global NAME # 已经声明,NAME就是全局的的那个变量
 6     print('我要搞', NAME)
 7     NAME = "小东北"  # 修改 全局的变量
 8     print('我要搞', NAME)
 9 
10 def qupengfei():
11     # NAME = "aS"
12     NAME.append('天扎龙')
13     print('我要搞', NAME)
14 
15 qupengfei()
复制代码

执行结果:

1 我要搞 小东北
2 我要搞 小东北
3 我要搞 ['产品经理', '廖波湿', '天扎龙']