目录

1. Python全局变量

2. 简单的示例

3. 全局变量的有效作用范围

4. 在函数内部修改变量

5. global关键字

6. 跨模块的情况


1. Python全局变量

Python全局变量是指其有效范围为整个程序空间。在程序的任何一个地方都可以访问这个变量,不管是在函数内部还是函数外部。

2. 简单的示例

先看一个简单的示例。

myVar = 'hello python - global'
def myFunction():print('Inside myFunction(): ',myVar)myFunction()
print('Outside myFunction(): ',myVar)

输出为:

Inside myFunction():  hello python - global
        Outside myFunction():  hello python - global

也就是说,在函数外面声明的myVar内部同样可以看到。

3. 全局变量的有效作用范围

像示例1中那样只要在函数外定义的变量都可以在整个文件中被任意访问到吗?不一定。严格地来说,它的有效范围在从它定义的那个位置往下的区间。将上例稍微改一下。

def myFunction():print('Inside myFunction(): ',myVar)myFunction()
myVar = 'hello python - global'
print('Outside myFunction(): ',myVar)

运行将报告错误:NameError: name 'myVar' is not defined

原因在于myFunction()执行的时刻,myVar还没有被声明。

4. 在函数内部修改变量

接下来我们看下一个例子,在函数内部对变量进行修改会发生什么呢?

myVar = 'hello python - global'
def myFunction():myVar = 'hello python - local'print('Inside myFunction(): ',myVar)
myFunction()
print('Outside myFunction(): ',myVar)

运行结果:

Inside myFunction():  hello python - local
        Outside myFunction():  hello python - global

咦,在函数内部和外部打印的结果不相同,说好的全局变量呢?为什么在函数内部做的修改没有带出来呢?

原因在于当你只是想看一个变量时,由于看一看并不会影响该变量的状态(呃,这个之所以成立是因为我们不是在讨论量子的世界),所以如果你在一个函数内部想看一个变量而在函数内部又没有对这个变量进行显式声明,然后又恰好有一个同名的全局变量时,python缺省地认为你是想看这个全局变量。

但是当你想修改一个变量的时候,情况就不一样了。如果你想对一个变量赋值(这是一个“破坏性“的行为),即便外面有一个同名的全局变量,如果你没有明确地告诉python说你是想访问全局变量,为了安全起见,python会认为你只是想为一个局部变量赋值,它会为你自动创建一个局部变量供你使用。这样,当从这个函数退出时,这个修改值不会带出去,即不会对同名全局变量产生影响。这是python所提供的一个安全措施。

那我的确是想在函数内部对一个全局变量赋值(有的时候,直接对全局变量进行操作确实能提高效率,虽然通常来说并不推荐,应该尽量避免),应该怎么办呢?这就到了global关键字出场的时候了。

5. global关键字

如果的确想在一个函数内部对全局变量赋值更新,可以用global关键字明确地告诉python。

myVar = 'hello python - global'
def myFunction():global myVarmyVar = 'hello python - I changed you inside myFunction'print('Inside myFunction(): ',myVar)
myFunction()
print('Outside myFunction(): ',myVar)

运行结果:

Inside myFunction():  hello python - I changed you inside myFunction
        Outside myFunction():  hello python - I changed you inside myFunction

如上所示,经过global声明后,myVar在函数内部被更新的值带回到函数外面了。

6. 跨模块的情况

我们知道在python中,一个源代码文件可以看作是一个模块(module)。在一个模块中声明了一个全局变量后,在另一个模块中能看到吗?答案是当然可以。只要把前一个模块import进来就可以了。在以下例子中,首先在python_global_1.py中定义如下:

myVar = 'hello python - global, in python_global_1 module'
def myFunction1():global myVarmyVar = 'hello python - I changed you inside myFunction'print('Inside myFunction(): ',myVar)

然后在python-global.py中,导入python_global_1 module如下:

from python_global_1 import *
def myFunction():print('Inside myFunction(): ',myVar)
myFunction()
print('Outside myFunction(): ',myVar)

运行python-global.py可以得到:

Inside myFunction():  hello python - global, in python_global_1 module
        Outside myFunction():  hello python - global, in python_global_1 module

在本专栏还有其它一些python学习过程中总结的点点滴滴的小知识,欢迎赏读。

Python全局变量及Global关键字( Global variable in Python)相关推荐

  1. python全局变量(模块法和global)

    python全局变量(模块法和global) python中全局变量使用,一般有两种方法,使用global和使用模块 global 在python中,可以使用global声明一个变量为全局变量 1. ...

  2. shell调用python脚本传递命名关键字参数_关于python:将字典作为关键字参数传递给函数...

    我想使用字典在python中调用函数. 这是一些代码: d = dict(param='test') def f(param): print(param) f(d) 这打印{'param': 'tes ...

  3. python函数变量的作用域_学不会的Python函数——变量作用域

    1. LEGB函数 Python中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的.我们先来看一段代码. 上述代码有两个变量a,当在test函数中输出变量a的值是,为什么 ...

  4. Python:Python语言的简介(语言特点/pyc介绍/Python版本语言兼容问题(python2 VS Python3))、安装、学习路线(数据分析/机器学习/网页爬等编程案例分析)之详细攻略

    Python:Python语言的简介(语言特点/pyc介绍/Python版本语言兼容问题(python2 VS Python3)).安装.学习路线(数据分析/机器学习/网页爬等编程案例分析)之详细攻略 ...

  5. python设置全局变量失败_Python全局变量与global关键字常见错误解决方案

    在Python的变量使用中,经常会遇到这样的错误: local variable 'a' referenced before assignment 它的意思是:局部变量"a"在赋值 ...

  6. Python 全局变量与global关键字

    Python 全局变量与global关键字 ​ 在Python的变量使用中,经常会遇到这样的错误: local variable 'a' referenced before assignment 它的 ...

  7. python系统关键字_Python基础教程 - global关键字及全局变量的用法

    Python中global关键字主要作用是声明变量的作用域. 在C语言中,由于变量一定是先声明,后使用,所以我们可以清楚的知道,现在使用的变量是全局还是局部,比如: int a = 5; void t ...

  8. python local global_Python 关键字global全局变量详解

    变量作用域 一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量. 全局变量所有作用域都可用,局部变量只能在本函数可用,变量的使用顺序是,局部变量 > 全局变量, 也就是说:优 ...

  9. 、简述global关键字的作用_二十三、Python变量作用域(局部变量和全局变量)

    变量的作用域 在Python中,变量的作用域指的是变量起作用的范围,不同的作用域内,虽然变量的名字相同,但是它们互不影响.变量按照作用域范围可分为局部变量和全局变量. 全局变量 全局变量是在函数定义和 ...

最新文章

  1. 硬科技凭什么产业化?
  2. 《计算机网络教程 自顶向下方法》 第一章
  3. tidb mysql5.7_MYSQL5.7实时同步数据到TiDB
  4. 最大似然估计 高斯分布
  5. Repeater控件结合UpdatePanel实现Ajax分页和删除功能
  6. 1555C. Coin Rows
  7. (转)为Spring集成的Hibernate配置二级缓存
  8. 速修复!21个漏洞影响60%的互联网邮箱服务器
  9. Win11右键菜单切回经典模式
  10. 如何设置Mac定时重启
  11. spring中这些开发技巧真的太diao了
  12. Paparazzi UAV Lisa/M2飞控使用说明书
  13. 验证性因子分析中有哪些指标?
  14. 区块链中国专利分析报告.20180309
  15. 爬豆瓣电影top名单
  16. Java实现蓝桥杯 九宫幻方
  17. 修改远程端口后登录不上的解决办法[作者:Jackie]
  18. 记录一下mac mini 2018 的折腾过程
  19. 超火的微信小说小程序源码-自带采集带安装教程
  20. CallBack函数调用

热门文章

  1. 【云原生之Docker实战】使用Docker部署Duplicati备份工具
  2. 前端学习从入门到高级全程记录之12 (CSS高级技巧)
  3. hsv 与 hsi 颜色空间
  4. 今天才发现!微信这样发语音才好听,学会快去尝试下吧
  5. java渡一教育百度云_小白学java第1篇(视频课程为渡一教育)
  6. Java位运算不一定比乘法快 (关于java数据运算的一些思考)
  7. 信息采集之微博热门自定以搜索
  8. Unity精华☀️ 「设计模式」的终极详解!
  9. PowerPoint VBA批量格式转换:pptx转pdf、ppt以及反向转换
  10. Unity-WebGL打包后不能输入中文