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内置数据类型详解
Aug 18 Python
Python多进程同步简单实现代码
Apr 27 Python
python线程池(threadpool)模块使用笔记详解
Nov 17 Python
Python小进度条显示代码
Mar 05 Python
详解pyppeteer(python版puppeteer)基本使用
Jun 12 Python
使用python批量修改文件名的方法(视频合并时)
Mar 24 Python
Python Django框架模板渲染功能示例
Nov 08 Python
Python3爬虫中关于中文分词的详解
Jul 29 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
Oct 22 Python
总结python 三种常见的内存泄漏场景
Nov 20 Python
python 邮件检测工具mmpi的使用
Jan 04 Python
Python操作CSV格式文件的方法大全
Jul 15 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
德劲1102收音机的打理维修案例
2021/03/02 无线电
PHP 开发环境配置(Zend Studio)
2010/04/28 PHP
深入Apache与Nginx的优缺点比较详解
2013/06/17 PHP
PHP实现ftp上传文件示例
2014/08/21 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
2018/10/18 PHP
实例解析php的数据类型
2018/10/24 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
提高javascript效率 一次判断,而不要次次判断
2012/03/30 Javascript
JS上传图片前的限制包括(jpg jpg gif及大小高宽)等
2012/12/19 Javascript
解析使用js判断只能输入数字、字母等验证的方法(总结)
2013/05/14 Javascript
jQuery中 delegate使用的问题
2015/07/03 Javascript
js+css绘制颜色动态变化的圈中圈效果
2016/01/27 Javascript
JavaScript实现QQ聊天消息展示和评论提交功能
2017/05/22 Javascript
微信小程序实现点击返回顶层的方法
2017/07/12 Javascript
Node.js实现发送邮件功能
2017/11/06 Javascript
微信小程序实现动态设置placeholder提示文字及按钮选中/取消状态的方法
2017/12/14 Javascript
vue.js element-ui validate中代码不执行问题解决方法
2017/12/18 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
2018/05/08 Javascript
vue父组件异步获取数据传给子组件的方法
2018/07/26 Javascript
webpack的pitching loader详解
2019/09/23 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
2019/11/15 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
Python GAE、Django导出Excel的方法
2008/11/24 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
2016/09/21 Python
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
Python中使用支持向量机(SVM)算法
2017/12/26 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
2019/10/18 Python
Python的缺点和劣势分析
2019/11/19 Python
海信商城:海信电视、科龙空调、容声冰箱官方专卖
2017/02/07 全球购物
中职应届生会计求职信
2013/10/23 职场文书
竞聘上岗演讲稿范文
2014/01/10 职场文书
岗位职责风险防控
2014/02/18 职场文书
2015选调生工作总结
2015/07/24 职场文书
HDFS免重启挂载新磁盘
2022/04/06 Servers
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS