博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在函数中修改全局变量的值,需要加global关键字
阅读量:6832 次
发布时间:2019-06-26

本文共 1262 字,大约阅读时间需要 4 分钟。

一、引用

使用到的全局变量只是作为引用,不在函数中修改它的值的话,不需要加global关键字。如:

#! /usr/bin/pythona = 1b = [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()

输出结果:

可以看出,无论是列表还是变量,都是可以直接引用的。

 

二、修改

使用到的全局变量,需要在函数中修改的话,就涉及到歧义问题,如:

#! /usr/bin/pythona = 1b = [2, 3]def func():    a = 2    print "in func a:", a    b[0] = 1    print "in func b:", bif __name__ == '__main__':    print "before func a:", a    print "before func b:", b    func()    print "after func a:", a    print "after func b:", b

输出结果:

可以看出,对于变量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/pythona = 1b = [2, 3]def func():    global a    a = 2    print "in func a:", a    b[0] = 1    print "in func b:", bif __name__ == '__main__':    print "before func a:", a    print "before func b:", b    func()    print "after func a:", a    print "after func b:", b

输出结果:

转载于:https://www.cnblogs.com/guoby/p/9046834.html

你可能感兴趣的文章
前端知识点——图片
查看>>
thinkphp源码分析(三)—自动加载篇(Loader的分析)
查看>>
Blink 真香
查看>>
一块听听:Mixin 主网上线语音直播文字稿
查看>>
brew安装错误brew Error: /usr/local must be writable!
查看>>
可应用于实际的14个NLP突破性研究成果(三)
查看>>
[LeetCode] 41. First Missing Positive
查看>>
阿里如何将“高峰前扩容、高峰后缩容”的梦想照进现实?
查看>>
分布式系统关注点——初识「高可用」
查看>>
Node.js学习之路22——利用cheerio制作简单的网页爬虫
查看>>
聊一聊我对 React Context 的理解以及应用
查看>>
很多程序员都不会的问题,你知道多少?
查看>>
Scrapy-redis分布式组件
查看>>
package.json里的一些属性讲解
查看>>
leetcode 12 Integer to Roman
查看>>
Swoole+Lumen:同步编程风格调用MySQL异步查询
查看>>
探索 JUC 之美---Future 与 FutureTask
查看>>
《Java RESTful Web Service实战》第一章的实现补漏
查看>>
smarty 中的for循环
查看>>
gitlab+jenkins+maven+docker持续集成(十一)——sonarqube及sonarscanner代码审查
查看>>