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 中的列表解析和生成表达式
Mar 10 Python
使用setup.py安装python包和卸载python包的方法
Nov 27 Python
python操作数据库之sqlite3打开数据库、删除、修改示例
Mar 13 Python
简单介绍Python中的round()方法
May 15 Python
Python切片知识解析
Mar 06 Python
python使用筛选法计算小于给定数字的所有素数
Mar 19 Python
基于python实现把图片转换成素描
Nov 13 Python
如何使用selenium和requests组合实现登录页面
Feb 03 Python
python利用datetime模块计算程序运行时间问题
Feb 20 Python
利用python汇总统计多张Excel
Sep 22 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
Nov 27 Python
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
May 17 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 函数执行效率的小比较
2010/10/17 PHP
php简单实现快速排序的方法
2015/04/04 PHP
Yii2创建控制器(createController)方法详解
2016/07/23 PHP
PHP数组内存利用率低和弱类型详细解读
2017/08/10 PHP
Laravle eloquent 多对多模型关联实例详解
2017/11/22 PHP
asp.net和php的区别点总结
2019/10/10 PHP
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
常见浏览器多长时间会提示“脚本运行时间过长”总结
2014/04/29 Javascript
js中函数声明与函数表达式
2015/06/03 Javascript
js预加载图片方法汇总
2015/06/15 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
基于Jquery插件实现跨域异步上传文件功能
2016/04/26 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
微信小程序开发经验总结(推荐)
2017/01/11 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
React Native 环境搭建的教程
2017/08/19 Javascript
jqueryUI tab标签页代码分享
2017/10/09 jQuery
spirngmvc js传递复杂json参数到controller的实例
2018/03/29 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
javascript 原型与原型链的理解及应用实例分析
2020/02/10 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
vue a标签点击实现赋值方式
2020/09/07 Javascript
[01:32]DOTA2 2015国际邀请赛中国区预选赛第四日战报
2015/05/29 DOTA
python中sets模块的用法实例
2014/09/30 Python
pytorch构建网络模型的4种方法
2018/04/13 Python
python中pika模块问题的深入探究
2018/10/13 Python
浅谈python中频繁的print到底能浪费多长时间
2020/02/21 Python
基于TensorFlow的CNN实现Mnist手写数字识别
2020/06/17 Python
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
美国著名珠宝品牌之一:Jared The Galleria Of Jewelry
2016/10/01 全球购物
后勤采购员岗位职责
2013/12/19 职场文书
毕业生求职自荐信怎么写
2014/01/08 职场文书
行政人事专员岗位职责
2014/03/05 职场文书
生物制药专业求职信
2014/03/11 职场文书
设备售后服务承诺书
2014/05/30 职场文书
人工作失职检讨书
2015/05/05 职场文书