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 相关文章推荐
Cython 三分钟入门教程
Sep 17 Python
由浅入深讲解python中的yield与generator
Apr 05 Python
django1.11.1 models 数据库同步方法
May 30 Python
详解python的argpare和click模块小结
Mar 31 Python
Python使用MyQR制作专属动态彩色二维码功能
Jun 04 Python
python 弹窗提示警告框MessageBox的实例
Jun 18 Python
对pyqt5之menu和action的使用详解
Jun 20 Python
用Python在Excel里画出蒙娜丽莎的方法示例
Apr 28 Python
详解Python 中的容器 collections
Aug 17 Python
python爬虫中PhantomJS加载页面的实例方法
Nov 12 Python
Python学习之time模块的基本使用
Jan 17 Python
Python+腾讯云服务器实现每日自动健康打卡
Dec 06 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
如何写php程序?
2006/12/08 PHP
php获取微信openid方法总结
2019/10/10 PHP
学习YUI.Ext 第二天
2007/03/10 Javascript
Mozilla 表达式 __noSuchMethod__
2009/04/05 Javascript
解决表单中第一个非隐藏的元素获得焦点的一个方案
2009/10/26 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
javascript实现模拟时钟的方法
2015/05/13 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
JQuery自适应窗口大小导航菜单附源码下载
2015/09/01 Javascript
3种js实现string的substring方法
2015/11/09 Javascript
javascript产生随机数方法汇总
2016/01/25 Javascript
使用JSON作为函数的参数的优缺点
2016/10/27 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
深入理解Vue 单向数据流的原理
2017/11/09 Javascript
微信小程序App生命周期详解
2018/01/31 Javascript
如何使用JavaScript实现栈与队列
2019/06/24 Javascript
layUI的验证码功能及校验实例
2019/10/25 Javascript
vue 动态表单开发方法案例详解
2019/12/02 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
2020/02/24 Javascript
详解Python中列表和元祖的使用方法
2015/04/25 Python
Python输出9*9乘法表的方法
2015/05/25 Python
Python实现堆排序的方法详解
2016/05/03 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
Python连接phoenix的方法示例
2017/09/29 Python
Python实现队列的方法示例小结【数组,链表】
2020/02/22 Python
Python extract及contains方法代码实例
2020/09/11 Python
如何给HTML标签中的文本设置修饰线
2019/11/18 HTML / CSS
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
介绍一下代理模式(Proxy)
2014/10/17 面试题
毕业生教师求职信
2013/10/20 职场文书
科室工作个人总结的自我评价
2013/10/29 职场文书
干部四风问题整改措施思想汇报
2014/10/13 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
篮球赛闭幕式主持词
2015/07/03 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书