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 相关文章推荐
DJANGO-ALLAUTH社交用户系统的安装配置
Nov 18 Python
python持久性管理pickle模块详细介绍
Feb 18 Python
Python中对象的引用与复制代码示例
Dec 04 Python
Python找出最小的K个数实例代码
Jan 04 Python
Python日期时间对象转换为字符串的实例
Jun 22 Python
Selenium定位元素操作示例
Aug 10 Python
Python3实现统计单词表中每个字母出现频率的方法示例
Jan 28 Python
Python调用百度根据经纬度查询地址的示例代码
Jul 07 Python
python 梯度法求解函数极值的实例
Jul 10 Python
Python小程序之在图片上加入数字的代码
Nov 26 Python
浅谈TensorFlow之稀疏张量表示
Jun 30 Python
python实现层次聚类的方法
Nov 01 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
Thinkphp5框架ajax接口实现方法分析
2019/08/28 PHP
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
jQuery基本选择器选择元素使用介绍
2013/04/18 Javascript
jquery选择器、属性设置用法经验总结
2013/09/08 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
jquery对象和javascript对象即DOM对象相互转换
2014/08/07 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
jQuery实现图片上传和裁剪插件Croppie
2015/11/29 Javascript
Bootstrap树形组件jqTree的简单封装
2016/01/25 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
2016/04/03 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
2017/02/27 Javascript
微信小程序实现手势图案锁屏功能
2018/01/30 Javascript
layer.open关闭父窗口 以及调用父页面的方法
2018/08/17 Javascript
vue-cli整合vuex的时候,修改actions和mutations,实现热部署的方法
2018/09/19 Javascript
zepto.js 实时监听输入框的方法
2018/12/04 Javascript
微信小程序 自定义弹窗实现过程(附代码)
2019/12/05 Javascript
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
python中使用mysql数据库详细介绍
2015/03/27 Python
django之常用命令详解
2016/06/30 Python
Python中的pack和unpack的使用
2018/03/12 Python
Django之Mode的外键自关联和引用未定义的Model方法
2018/12/15 Python
分析经典Python开发工程师面试题
2019/04/08 Python
python+opencv边缘提取与各函数参数解析
2020/03/09 Python
Python如何给函数库增加日志功能
2020/08/04 Python
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
玩具反斗城天猫官方旗舰店:享誉全球的玩具店
2017/10/10 全球购物
现代生活方式的家具和装饰:Dot & Bo
2018/12/26 全球购物
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
失业者真诚求职信范文
2013/12/25 职场文书
《果园机器人》教学反思
2014/04/13 职场文书
运动会横幅标语
2014/06/17 职场文书
家属慰问信
2015/02/14 职场文书
2015年国庆晚会主持词
2015/07/01 职场文书
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB
Hive常用日期格式转换语法
2022/06/25 数据库