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调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
Aug 15 Python
python实现在每个独立进程中运行一个函数的方法
Apr 23 Python
Python和JavaScript间代码转换的4个工具
Feb 22 Python
详解Python开发中如何使用Hook技巧
Nov 01 Python
Python 使用PIL numpy 实现拼接图片的示例
May 08 Python
Python正则匹配判断手机号是否合法的方法
Dec 09 Python
对python 调用类属性的方法详解
Jul 02 Python
python同步两个文件夹下的内容
Aug 29 Python
python根据时间获取周数代码实例
Sep 30 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
May 15 Python
解决django框架model中外键不落实到数据库问题
May 20 Python
Keras 中Leaky ReLU等高级激活函数的用法
Jul 05 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 中的类
2006/10/09 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
2016/03/25 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
javascript两段代码,两个小技巧
2010/02/04 Javascript
jquery实现的超出屏幕时把固定层变为定位层的代码
2010/02/23 Javascript
TreeView 用法(有代码)(asp.net)
2011/07/15 Javascript
IE6已终止操作问题的2种情况及解决
2014/04/23 Javascript
JavaScript中的时间处理小结
2016/02/24 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
浅谈ECMAScript6新特性之let、const
2017/08/02 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
一个小时快速搭建微信小程序的方法步骤
2019/04/15 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
2019/09/29 Javascript
vue + el-form 实现的多层循环表单验证
2020/11/25 Vue.js
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
pyqt5实现登录界面的模板
2020/05/30 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
对Django外键关系的描述
2019/07/26 Python
python中bs4.BeautifulSoup的基本用法
2019/07/27 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
Python字节单位转换实例
2019/12/05 Python
python3下pygame如何实现显示中文
2020/01/11 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
多视角3D可旋转的HTML5 Logo动画
2016/03/02 HTML / CSS
英国Radley包德国官网:Radley London德国
2019/11/18 全球购物
英语文学专业学生的自我评价
2013/10/31 职场文书
大学生志愿者感言
2014/01/15 职场文书
培训楼经理岗位责任制
2014/02/10 职场文书
机械专业应届毕业生自荐书
2014/06/12 职场文书
诉讼授权委托书
2014/10/15 职场文书
2014年药剂科工作总结
2014/11/26 职场文书
当幸福来敲门观后感
2015/06/01 职场文书
MySQL分库分表与分区的入门指南
2021/04/22 MySQL
GoLang中生成UUID唯一标识的实现
2021/05/08 Golang