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 相关文章推荐
10个易被忽视但应掌握的Python基本用法
Apr 01 Python
从源码解析Python的Flask框架中request对象的用法
Jun 02 Python
Python学习思维导图(必看篇)
Jun 26 Python
Python实现统计代码行的方法分析
Jul 12 Python
python构建深度神经网络(续)
Mar 10 Python
python-django中的APPEND_SLASH实现方法
Jun 21 Python
如何运行带参数的python脚本
Nov 15 Python
python队列原理及实现方法示例
Nov 27 Python
Python实现对adb命令封装
Mar 06 Python
Python unittest单元测试框架及断言方法
Apr 15 Python
Python如何读取、写入CSV数据
Jul 28 Python
Python  序列化反序列化和异常处理的问题小结
Dec 24 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 mssql 分页SQL语句优化 持续影响
2009/04/26 PHP
PHP自动生成后台导航网址的最佳方法
2013/08/27 PHP
php发送post请求的三种方法
2014/02/11 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
php计划任务之ignore_user_abort函数实现方法
2015/01/08 PHP
laravel邮件发送的实现代码示例
2020/01/31 PHP
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
犀利的js 函数集合
2009/06/11 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
2014/06/30 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
javascript返回顶部的按钮实现方法
2016/01/09 Javascript
jQuery实现简单滚动动画效果
2016/04/07 Javascript
jQuery实现联动下拉列表查询框
2017/01/04 Javascript
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
2017/05/28 Javascript
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
Python单例模式的两种实现方法
2017/08/14 Python
python Pygame的具体使用讲解
2017/11/03 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
wxPython实现绘图小例子
2019/11/19 Python
python保存log日志,实现用log日志画图
2019/12/24 Python
Django之choices选项和富文本编辑器的使用详解
2020/04/01 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
使用css3匹配手机屏幕横竖状态
2014/01/27 HTML / CSS
css3 transform及原生js实现鼠标拖动3D立方体旋转
2016/06/20 HTML / CSS
HTML5中原生的右键菜单创建方法
2016/06/28 HTML / CSS
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
汉语专业应届生求职信
2013/10/01 职场文书
三年级小学生评语
2014/04/22 职场文书
电气工程及其自动化专业毕业生自荐信
2014/06/21 职场文书
外贸会计专业自荐信
2014/06/22 职场文书
党的群众路线教育实践活动先进个人材料
2014/12/24 职场文书
Django与数据库交互的实现
2021/06/03 Python
了解MySQL查询语句执行过程(5大组件)
2022/08/14 MySQL