global的英文相比你确定知道,全球的,总的。那么正Python编程语言中,结合global的中文意思你会更加的理解这个关键字的用法。咱们使用global关键字能够定义Global的变量。python
global关键字能够定义一个变量,被定义的变量能够在变量做用域以外被修改,通俗讲就是一个全局的变量,这个全局的变量在其被定义后,能够在所有上文中修改和使用。可是,global也是随便被使用的,它也有一些本身的规则,当咱们在函数内部建立一个变量的时候,若是咱们想让他变成一个全局变量,咱们须要使用关键字global定义它,可是若是咱们在函数外面定义的变量默认就是global的变量,不用在使用global关键字定义。git
首先我先尝试一下以下代码,咱们实现默认移动5步的这样一个函数:github
# 当前所处位置 cur = 0 # 默认往前移动无不 def movenext(): print(cur) #调用Main函数 if __name__ == '__main__': movenext()
运行后,控制台输出以下:编程
0 Process finished with exit code 0
那么我刚刚说了,这个函数是我想像往前移动5步,那么这么一想,我就作了以下修改:session
# 当前所处位置 cur = 0 # 默认往前移动无不 def movenext(): cur=cur+5 print(cur) #调用Main函数 if __name__ == '__main__': movenext()
运行后,控制台输出却变成了以下:编程语言
Traceback (most recent call last): File "criss_try.py", line 18, inmovenext() File “criss_try.py", line 14, in movenext cur=cur+5 UnboundLocalError: local variable 'cur' referenced before assignment
上面的错误是由于对于在函数外面定义的global的变量,在函数内部只能完成对其访问,不能对其修改,所以会出现上述报告,若是你想在函数对一个global的变量进行修改,那么须要显著的声明global变量,做以下修改:ide
# 当前所处位置 cur = 0 # 默认往前移动无不 def movenext(): #显著的声明global变量 global cur cur=cur+5 print(cur) #调用Main函数 if __name__ == '__main__': movenext() print(cur)
运行结果以下:函数
5 5 Process finished with exit code 0
能够看出,第一个5是在movenext函数中打印出来的,第二个5是在main函数中打印出来的,可是都是打印了cur这个变量。咱们在movenext函数中完成了cur的修改,可是咱们在movenext函数中或者函数外打印cur都是同样的结果,说明在函数中修改的cur就是全局的cur这个变量。.net
从上面的内容中咱们能够看到Global是在一个py文件内部约束全局变量的关键字,在同一个项目中咱们是如何约束一个项目的全局变量的呢?code
借助Global的思路,创建一个全局变量管理的机制,这样就能够提供项目级的全局变量了新建global_manager.py
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2020/8/24 2:54 下午 # @Author : CrissChan # @From :https://github.com/crisschan/ # @Site : https://blog.csdn.net/crisschan # @File : global_manager.py # @Intro : 项目级的全局变量管理器,经过global定义全局字典,完成项目的全局变量的定义 # 使用方法在对应的文件中: # import global_manager as glob # glob._init() # 先必须在主模块初始化 # # 定义跨模块全局变量 # glob.set_value('sessionid', sessionid) # 在使用全局变量的项目内的文件前中: # import global_manager as glob # sessionid=glob.get_value('sessionid') # # 这就达到了项目将全局变量的目的 def _init(): ''' 初始化全局变量管理器 :return: ''' global _glo_dict _glo_dict = {} def set_value(key, value): ''' 将全局变量存入全局变量管理器 :param key: 全局变量的名字 :param value: 全局变量的值 :return: ''' _global_dict[key] = value def get_value(key): ''' :param key: 全局变量的名字 :return: ''' try: return _global_dict[key] except KeyError as e: print(e)