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 + openpyxl处理excel2007文档思路以及心得
Jul 14 Python
python生成IP段的方法
Jul 07 Python
利用Python批量生成任意尺寸的图片
Aug 29 Python
浅谈用VSCode写python的正确姿势
Dec 16 Python
详解Python判定IP地址合法性的三种方法
Mar 06 Python
python 通过麦克风录音 生成wav文件的方法
Jan 09 Python
Python集合基本概念与相关操作实例分析
Oct 30 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
Nov 26 Python
Numpy之将矩阵拉成向量的实例
Nov 30 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
Feb 18 Python
Python爬虫抓取论坛关键字过程解析
Oct 19 Python
Python 用__new__方法实现单例的操作
Dec 11 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递归使用示例(php递归函数)
2014/02/14 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
2015/12/07 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
Javascript的IE和Firefox兼容性汇编
2006/07/01 Javascript
JavaScript 学习笔记 Black.Caffeine 09.11.28
2009/11/30 Javascript
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
Javascript call和apply区别及使用方法
2013/11/14 Javascript
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
js实现prototype扩展的方法(字符串,日期,数组扩展)
2016/01/14 Javascript
前端框架Vue.js构建大型应用浅析
2016/09/12 Javascript
nodejs简单实现操作arduino
2016/09/25 NodeJs
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
如何使用RoughViz可视化Vue.js中的草绘图表
2021/01/30 Vue.js
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
2015/03/06 Python
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
Python实现繁体中文与简体中文相互转换的方法示例
2018/12/18 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
python 装饰器的基本使用
2021/01/13 Python
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
Java程序员面试题
2016/09/27 面试题
关于是否需要写商业计划书
2014/02/07 职场文书
《美丽的丹顶鹤》教学反思
2014/04/22 职场文书
大学生精神文明先进个人事迹材料
2014/05/02 职场文书
死亡诗社观后感
2015/06/05 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书
关于做家务的心得体会
2016/01/23 职场文书
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记