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实现网站文件的全备份和差异备份
Nov 30 Python
浅谈五大Python Web框架
Mar 20 Python
pandas通过索引进行排序的示例
Nov 16 Python
Python基础之条件控制操作示例【if语句】
Mar 23 Python
详解python数据结构和算法
Apr 18 Python
如何用Python做一个微信机器人自动拉群
Jul 03 Python
Python Django的安装配置教程图文详解
Jul 17 Python
Python 调用 Outlook 发送邮件过程解析
Aug 08 Python
Python操作Mongodb数据库的方法小结
Sep 10 Python
python编写微信公众号首图思路详解
Dec 13 Python
Pandas —— resample()重采样和asfreq()频度转换方式
Feb 26 Python
服务器端jupyter notebook映射到本地浏览器的操作
Apr 14 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循环创建目录示例分享(php创建多级目录)
2014/03/04 PHP
php调用google接口生成二维码示例
2014/04/28 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
PHP处理Json字符串解码返回NULL的解决方法
2014/09/01 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
一个简单的js树形菜单
2011/12/09 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
javascript中的document.open()方法使用介绍
2013/10/09 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
javascript实现的字符串与十六进制表示字符串相互转换方法
2015/07/17 Javascript
Bootstrap每天必学之基础排版
2015/11/20 Javascript
详解js图片轮播效果实现原理
2015/12/17 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
2016/06/13 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
Bootstrap优化站点资源、响应式图片、传送带使用详解3
2016/10/14 Javascript
Angular2 父子组件数据通信实例
2017/06/22 Javascript
jQuery实现菜单栏导航效果
2017/08/15 jQuery
vue+axios+element ui 实现全局loading加载示例
2018/09/11 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
2015/05/22 Python
Python随手笔记第一篇(2)之初识列表和元组
2016/01/23 Python
Sanic框架配置操作分析
2018/07/17 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
Python高级编程之继承问题详解(super与mro)
2019/11/19 Python
python实现指定ip端口扫描方式
2019/12/17 Python
django中related_name的用法说明
2020/05/20 Python
class类在python中获取金融数据的实例方法
2020/12/10 Python
如何使用amaze ui的分页样式封装一个通用的JS分页控件
2020/08/21 HTML / CSS
小学防溺水制度
2014/01/29 职场文书
小学安全教育材料
2014/02/17 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
好人好事新闻稿
2015/07/17 职场文书
vue 自定义组件添加原生事件
2022/04/21 Vue.js