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使用Matplotlib实现Logos设计代码
Dec 25 Python
python实现嵌套列表平铺的两种方法
Nov 08 Python
Python设计模式之享元模式原理与用法实例分析
Jan 11 Python
python xpath获取页面注释的方法
Jan 14 Python
python字典的遍历3种方法详解
Aug 10 Python
使用Python调取任意数字资产钱包余额功能
Aug 15 Python
Python实现滑动平均(Moving Average)的例子
Aug 24 Python
详解python中的模块及包导入
Aug 30 Python
python os.path.isfile 的使用误区详解
Nov 29 Python
Python爬虫入门有哪些基础知识点
Jun 02 Python
Python turtle库的画笔控制说明
Jun 28 Python
Python编程super应用场景及示例解析
Oct 05 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
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
2007/03/15 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
PHP实现简单爬虫的方法
2015/07/29 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
微信公众号开发之通过接口删除菜单
2017/02/20 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
php使用fullcalendar日历插件详解
2019/03/06 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
Javascript非构造函数的继承
2015/04/27 Javascript
jQuery基于muipicker实现仿ios时间选择
2016/02/22 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
一个仿微博登陆邮箱提示框js开发案例
2016/07/28 Javascript
jQuery实现隔行变色的方法分析(对比原生JS)
2016/11/18 Javascript
js倒计时小实例(多次定时)
2016/12/08 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
Vue组件开发初探
2017/02/14 Javascript
详解vue 模拟后台数据(加载本地json文件)调试
2017/08/25 Javascript
vue下history模式刷新后404错误解决方法
2018/08/18 Javascript
使用jQuery给Table动态增加行、清空table的方法
2018/09/05 jQuery
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
2019/09/19 Javascript
jquery.tagsinput.js实现记录checkbox勾选的顺序
2019/09/21 jQuery
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
python文件读写并使用mysql批量插入示例分享(python操作mysql)
2014/02/17 Python
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
python解压TAR文件至指定文件夹的实例
2019/06/10 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
python实现静态服务器
2019/09/05 Python
Python闭包与装饰器原理及实例解析
2020/04/30 Python
css3给背景图片加颜色遮罩的方法
2019/11/05 HTML / CSS
Otticanet英国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/02/10 全球购物
花卉与景观设计系大学生求职信
2013/10/01 职场文书
空气环保标语
2014/06/12 职场文书
财务工作检讨书
2014/10/29 职场文书
springboot中的pom文件 project报错问题
2022/01/18 Java/Android