python global关键字的用法详解


Posted in Python onSeptember 05, 2019

最近刚好有朋友遇到个global相关的问题,这里简单学习一下global关键字的用法。

想要更好的了解global关键字,首先要熟悉python的全局变量与局部变量的概念。global关键字的作用是可以申明一个局部变量为全局变量,下面看一下实例

一、变量作用域的说明

这里简单提一下变量作用域的概念,有兴趣的小伙伴,可以查一下相关的博客

1、局部变量

def a():
  ## 菊部变量 - ,-
  local = 1
  print(local)
## 全局无法使用,只有自己可用
print(lobal)

2、全局变量

global_str = '123'
def a():
  ## 全菊变量 - ,-
  print(global_str)
## 全菊变量大家都可以用
print(global_str)

3、内置作用域

系统内固定模块里定义的变量,如预定义在builtin 模块内的变量。这里不介绍了。

4、嵌套作用域

用的也比较少,主要是用在闭包中,看栗子

def out():
  ## 函数内变量,但对于下级函数就是全局变量,对于外部来说就是局部变量
  en = 1
  def inside():
    print(en)
    return en
  return inside()
out()

二、global关键字作用

1、在函数间global关键字的作用

def out():
  ## global关键字作用
  global en
  en = 1
  ## 调用other可以打印en,去掉global会报错。
  other()
  print(out.__globals__)
def other():
  print(en)
out()

2、在类中也是一样,不多说,怕越多越乱,类中可以用self。

3、其他文件导入,如果定义好了之后从其他文件导入了呢?会发生什么,看一下栗子,a文件仍为上面栗子中代码

from report.a import *
out()
print(out.__globals__['en'])

结果:

1
1

还好还好,没有报错。

4、那么问题来了,如果要在另一个文件中继续定义函数,是不是也可以继续使用a文件中的global申明的全局变量呢?

from report.a import out
def b():
  print(out.__globals__['en'])
  ## 直接飙红了。 -,-
  print(en)
b()

果然报错了:

Traceback (most recent call last):
 File "/Users/dangfuli/Documents/PycharmProjects/asp/report/b.py", line 9, in <module>
  b()
 File "/Users/dangfuli/Documents/PycharmProjects/asp/report/b.py", line 6, in b
  print(out.__globals__['en'])
KeyError: 'en'

也就是说,导入包的话,global定义的全局变量没有被加到globals里面。

5、上面好多地方都用到了,func.__globals__,这个运行一下,看个实例

def out():
  ## global关键字作用
  global en
  en = 1
  other()
  print(out.__globals__)
  ## 调用other可以打印en

def other():
  print(en)

out()

## 返回结果
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x10306a7b8>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/Users/xxx/Documents/PycharmProjects/xxx/report/a.py', '__cached__': None, 'out': <function out at 0x101fcee18>, 'other': <function other at 0x1033f8c80>, 'en': 1}

可以看到,当前的函数用global之后,en变量就被加到了globals里面

下面看看导入到其他地方去的

# a.py
def out():
  ## global关键字作用
  global en
  en = 1
  other()
  print(out.__globals__['en'])
  ## 调用other可以打印en

def other():
  print(en)
#############上面是a文件,下面是b文件#############

# b.py
from report.a import out

def b():
  ## globals里面没有en那个全局变量
  out()
  print(b.__globals__['en'])

b()

看一下结果:

1
Traceback (most recent call last):
 File "/Users/xxx/Documents/PycharmProjects/xxx/report/b.py", line 8, in <module>
  b()
 File "/Users/xxx/Documents/PycharmProjects/xxx/report/b.py", line 6, in b
  print(b.__globals__['en'])
KeyError: 'en'

可以看到,导入的a文件正常运行,b文件打印en的时候就报错了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python在linux中输出带颜色的文字的方法
Jun 19 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
Sep 06 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
Nov 06 Python
python协程之动态添加任务的方法
Feb 19 Python
利用python脚本如何简化jar操作命令
Feb 24 Python
django celery redis使用具体实践
Apr 08 Python
Python3.5文件读与写操作经典实例详解
May 01 Python
解决python中使用PYQT时中文乱码问题
Jun 17 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
Sep 10 Python
解析Python3中的Import
Oct 13 Python
Python3查找列表中重复元素的个数的3种方法详解
Feb 13 Python
Python中如何添加自定义模块
Jun 09 Python
python requests证书问题解决
Sep 05 #Python
Python使用scipy模块实现一维卷积运算示例
Sep 05 #Python
Python图像处理模块ndimage用法实例分析
Sep 05 #Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
Sep 05 #Python
PyCharm搭建Spark开发环境的实现步骤
Sep 05 #Python
浅谈Python_Openpyxl使用(最全总结)
Sep 05 #Python
python实现人工智能Ai抠图功能
Sep 05 #Python
You might like
使用字符串函数输出整数化的PHP版本号
2006/10/09 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
php写的AES加密解密类分享
2014/06/20 PHP
php内嵌函数用法实例
2015/03/20 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
2020/04/13 PHP
求得div 下 img的src地址的js代码
2007/02/28 Javascript
JObj预览一个JS的框架
2008/03/13 Javascript
关于JavaScript定义类和对象的几种方式
2010/11/09 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
2013/08/02 Javascript
浏览器兼容console对象的简要解决方案分享
2013/10/24 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
js实现图片漂浮效果的方法
2015/03/02 Javascript
jQuery实用技巧必备(中)
2015/11/03 Javascript
JavaScript动态插入CSS的方法
2015/12/10 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
2016/12/26 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
2017/01/06 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
JavaScript引用类型RegExp基本用法详解
2018/08/09 Javascript
angular2/ionic2 实现搜索结果中的搜索关键字高亮的示例
2018/08/17 Javascript
vue组件开发之tab切换组件使用详解
2020/08/21 Javascript
[01:32]dota2拉比克至宝(222)
2018/12/20 DOTA
基于python实现的抓取腾讯视频所有电影的爬虫
2016/04/22 Python
python numpy库np.percentile用法说明
2020/06/08 Python
使用CSS实现弹性视频html5案例实践
2012/12/26 HTML / CSS
全球500多个机场的接送服务:Suntransfers
2019/06/03 全球购物
台湾时尚彩瞳专门店:imeime
2019/08/16 全球购物
珍惜水资源建议书
2014/03/12 职场文书
超市中秋节促销方案
2014/03/21 职场文书
考勤制度通知
2015/04/25 职场文书
2019毕业典礼主持词!
2019/07/05 职场文书
python爬取企查查企业信息之selenium自动模拟登录企查查
2021/04/08 Python
python中如何对多变量连续赋值
2021/06/03 Python
springboot集成springCloud中gateway时启动报错的解决
2021/07/16 Java/Android
JS setTimeout与setInterval的区别
2022/04/20 Javascript