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计算一个文件里字数的方法
Jun 15 Python
详解Python实现多进程异步事件驱动引擎
Aug 25 Python
python+opencv轮廓检测代码解析
Jan 05 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
Mar 31 Python
python和shell获取文本内容的方法
Jun 05 Python
Python实现的微信好友数据分析功能示例
Jun 21 Python
redis数据库及与python交互用法简单示例
Nov 01 Python
Pytorch 实现权重初始化
Dec 31 Python
浅谈Django中的QueryDict元素为数组的坑
Mar 31 Python
Python实现ElGamal加密算法的示例代码
Jun 19 Python
Python3.7安装pyaudio教程解析
Jul 24 Python
浅谈python 类方法/静态方法
Sep 18 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下MAIL的另一解决方案
2006/10/09 PHP
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
本地计算机无法启动Apache故障处理
2014/08/08 PHP
PHP session 会话处理函数
2016/06/06 PHP
基于PHP实现短信验证码接口(容联运通讯)
2016/09/06 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
PHP常用函数之获取汉字首字母功能示例
2019/10/21 PHP
js ondocumentready onmouseover onclick onmouseout 样式
2010/07/22 Javascript
jquery中ajax学习笔记3
2011/10/16 Javascript
JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性
2012/10/11 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
2013/06/05 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
2013/12/12 Javascript
让html页面不缓存js的实现方法
2014/10/31 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
深入理解jQuery之事件移除
2016/06/02 Javascript
Seajs是什么及sea.js 由来,特点以及优势
2016/10/13 Javascript
ES6之模版字符串的具体使用
2018/05/17 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
2019/12/16 Javascript
js实现简单商品筛选功能
2021/02/02 Javascript
[06:45]DOTA2卡尔工作室 英雄介绍幻影长矛手篇
2013/07/12 DOTA
[35:43]2018DOTA2亚洲邀请赛 4.1 小组赛B组 paiN vs Effect
2018/04/03 DOTA
详解Python中for循环是如何工作的
2017/06/30 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
python 解决pycharm运行py文件只有unittest选项的问题
2020/09/01 Python
美国在线家装零售商:Build.com
2016/09/02 全球购物
高校毕业生自我鉴定
2013/10/27 职场文书
高中体育教学反思
2014/01/29 职场文书
收银员岗位职责
2014/02/07 职场文书
政风行风建设责任书
2014/07/23 职场文书
科学发展观活动总结
2014/08/28 职场文书
nginx实现动静分离的方法示例
2021/11/07 Servers
JavaScript的Set数据结构详解
2022/02/18 Javascript