python全局变量引用与修改过程解析


Posted in Python onJanuary 07, 2020

这篇文章主要介绍了python全局变量引用与修改过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一、引用

使用到的全局变量只是作为引用,不在函数中修改它的值的话,不需要加global关键字。如:

#! /usr/bin/python

a = 1
b = [2, 3]

def func():
  if a == 1:
    print("a: %d" %a)
  for i in range(4):
    if i in b:
      print("%d in list b" %i)
    else:
      print("%d not in list b" %i)
if __name__ == '__main__':
  func()

输出结果:

python全局变量引用与修改过程解析

可以看出,无论是列表还是变量,都是可以直接引用的。

二、修改

使用到的全局变量,需要在函数中修改的话,就涉及到歧义问题,如:

#! /usr/bin/python
a = 1
b = [2, 3]

def func():
  a = 2
  print "in func a:", a
  b[0] = 1
  print "in func b:", b

if __name__ == '__main__':
  print "before func a:", a
  print "before func b:", b
  func()
  print "after func a:", a
  print "after func b:", b

输出结果:

python全局变量引用与修改过程解析

可以看出,对于变量a,在函数func中"a = 2",因为存在既可以表示引用全局变量a,也可以表示创建一个新的局部变量的歧义,所以python默认指定创建一个新的局部变量来消除这一歧义,但对于列表b而言,"b[0] = 1"不存在这种歧义,因此直接修改了全局变量,但是如果改成了"b = [3, 4]",那么b也会变成局部变量。特别地,当在func中a = 2之前加入"if a == 1:"这一语句,脚本运行出错,因为这一语句引入了全局变量,导致了"a = 1"这一语句无法创建同名的局部变量。

因此,需要修改全局变量a,可以在"a = 2"之前加入global a声明,如:

#! /usr/bin/python

a = 1
b = [2, 3]

def func():
  global a
  a = 2
  print "in func a:", a
  b[0] = 1
  print "in func b:", b

if __name__ == '__main__':
  print "before func a:", a
  print "before func b:", b
  func()
  print "after func a:", a
  print "after func b:", b

输出结果:

python全局变量引用与修改过程解析

结论:引用全局变量,不需要golbal声明,修改全局变量,需要使用global声明,特别地,列表、字典等如果只是修改其中元素的值,可以直接使用全局变量,不需要global声明。结论:引用全局变量,不需要golbal声明,修改全局变量,需要使用global声明,特别地,列表、字典等如果只是修改其中元素的值,可以直接使用全局变量,不需要global声明。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
Mar 05 Python
用Python进行一些简单的自然语言处理的教程
Mar 31 Python
python的keyword模块用法实例分析
Jun 30 Python
Ubuntu安装Jupyter Notebook教程
Oct 18 Python
django使用LDAP验证的方法示例
Dec 10 Python
对Python中class和instance以及self的用法详解
Jun 26 Python
python multiprocessing模块用法及原理介绍
Aug 20 Python
解决安装pyqt5之后无法打开spyder的问题
Dec 13 Python
Python 线性回归分析以及评价指标详解
Apr 02 Python
Python爬虫requests库多种用法实例
May 28 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
Jun 23 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 04 Python
python__new__内置静态方法使用解析
Jan 07 #Python
Python常用模块sys,os,time,random功能与用法实例分析
Jan 07 #Python
python单例设计模式实现解析
Jan 07 #Python
Python字典生成式、集合生成式、生成器用法实例分析
Jan 07 #Python
linux环境下安装python虚拟环境及注意事项
Jan 07 #Python
Python包,__init__.py功能与用法分析
Jan 07 #Python
Python3实现发送邮件和发送短信验证码功能
Jan 07 #Python
You might like
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
javascript读取xml
2006/11/04 Javascript
JavaScript 拖拉缩放效果
2008/12/10 Javascript
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
封装的原生javascript弹出层代码
2010/09/24 Javascript
JavaScript实现页面滚动图片加载(仿lazyload效果)
2011/07/22 Javascript
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
jquery 通过name快速取值示例
2014/01/24 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
JavaScript 事件绑定及深入
2015/04/13 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
2016/01/15 Javascript
JQuery 设置checkbox值二次无效的解决方法
2016/07/22 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
JavaScript实现网页下拉菜单效果
2020/11/20 Javascript
[07:03]显微镜下的DOTA2第九期——430圣堂刺客杀戮秀
2014/06/20 DOTA
简单理解Python中基于生成器的状态机
2015/04/13 Python
numpy返回array中元素的index方法
2018/06/27 Python
python 实现A*算法的示例代码
2018/08/13 Python
python3实现名片管理系统
2020/11/29 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
css3 background属性调整增强介绍
2010/12/18 HTML / CSS
html5 web本地存储将取代我们的cookie
2012/12/26 HTML / CSS
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
澳大利亚最大的在线美发和美容零售商之一:My Hair Care & Beauty
2019/08/24 全球购物
类和结构的区别
2012/08/15 面试题
企业申诉管理制度
2014/01/30 职场文书
商场促销活动方案
2014/02/08 职场文书
幼儿园运动会加油词
2014/02/14 职场文书
房产代理公证处委托书
2014/04/04 职场文书
2014离婚协议书范文(3篇)
2014/11/29 职场文书
三八红旗手主要事迹材料
2015/11/04 职场文书
vue组件冲突之引用另一个组件出现组件不显示的问题
2022/04/13 Vue.js