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使用urllib模块的urlopen超时问题解决方法
Nov 08 Python
python实现的简单文本类游戏实例
Apr 28 Python
Python变量和数据类型详解
Feb 15 Python
Python+selenium实现截图图片并保存截取的图片
Jan 05 Python
Python决策树之基于信息增益的特征选择示例
Jun 25 Python
Django restframework 源码分析之认证详解
Feb 22 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
pyenv与virtualenv安装实现python多版本多项目管理
Aug 17 Python
使用python检查yaml配置文件是否符合要求
Apr 09 Python
keras .h5转移动端的.tflite文件实现方式
May 25 Python
Python如何合并多个字典或映射
Jul 24 Python
python 实现音频叠加的示例
Oct 29 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批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
PHP判断密码强度的方法详解
2017/05/26 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
Javascript 命名空间模式
2013/11/01 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
在JavaScript的AngularJS库中进行单元测试的方法
2015/06/23 Javascript
JavaScript中Boolean对象的属性解析
2015/10/21 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
详解用vue.js和laravel实现微信授权登陆
2017/06/23 Javascript
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
jQuery length 和 size()区别总结
2018/04/26 jQuery
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
使用sklearn的cross_val_score进行交叉验证实例
2020/02/28 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
css3实现小箭头各种图形效果
2020/07/08 HTML / CSS
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
世界上最好的帽子:Tilley
2016/11/27 全球购物
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
shell程序中如何注释
2012/01/28 面试题
百度JavaScript笔试题
2015/01/15 面试题
预备党员2014全国两会学习心得体会
2014/03/10 职场文书
酒店管理求职信范文
2014/04/06 职场文书
临床医学生职业规划书范文
2014/10/25 职场文书
监理中标通知书
2015/04/16 职场文书
会计实训总结范文
2015/08/03 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
MySQL分库分表详情
2021/09/25 MySQL
python脚本框架webpy模板赋值实现
2021/11/20 Python
多线程Spring通过@Scheduled实现定时任务
2022/05/25 Java/Android