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中的自定义函数学习笔记
Sep 23 Python
python中__call__方法示例分析
Oct 11 Python
python通过线程实现定时器timer的方法
Mar 16 Python
Python从MP3文件获取id3的方法
Jun 15 Python
举例区分Python中的浅复制与深复制
Jul 02 Python
改进Django中的表单的简单方法
Jul 17 Python
基于Python如何使用AIML搭建聊天机器人
Jan 27 Python
python opencv捕获摄像头并显示内容的实现
Jul 11 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
Feb 03 Python
Python-jenkins模块之folder相关操作介绍
May 12 Python
Python+OpenCV图像处理——实现轮廓发现
Oct 23 Python
python性能测试工具locust的使用
Dec 28 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 OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
纯php生成随机密码
2015/10/30 PHP
JS option location 页面跳转实现代码
2008/12/27 Javascript
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
2011/09/19 Javascript
extjs ColumnChart设置不同的颜色实现代码
2013/05/17 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
基于 Node.js 实现前后端分离
2016/04/23 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
2016/06/08 Javascript
JavaScript学习笔记--常用的互动方法
2016/12/07 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
2016/12/13 Javascript
JavaScript无操作后屏保功能的实现方法
2017/07/04 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
2017/08/18 Javascript
javascript系统时间设置操作示例
2019/06/17 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
2020/01/18 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
一文秒懂nodejs中的异步编程
2021/01/28 NodeJs
Python的Asyncore异步Socket模块及实现端口转发的例子
2016/06/14 Python
window下eclipse安装python插件教程
2017/04/24 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
2017/05/23 Python
Zookeeper接口kazoo实例解析
2018/01/22 Python
tensorflow实现softma识别MNIST
2018/03/12 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
python两个list[]相加的实现方法
2020/09/23 Python
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
夏威夷咖啡公司:Hawaii Coffee Company
2019/09/19 全球购物
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
司机职责范本
2014/03/08 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
2014年干部作风建设总结
2014/10/23 职场文书
电子商务实训报告总结
2014/11/05 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang