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)