Python中的global關鍵字的用法以及如何設置項目級的Global變量


Python中的global關鍵字的用法

global的英文相比你確定知道,全球的,總的。那麼正Python編程語言中,結合global的中文意思你會更加的理解這個關鍵字的用法。咱們使用global關鍵字能夠定義Global的變量。python

global 關鍵字能什麼呢

global關鍵字能夠定義一個變量,被定義的變量能夠在變量做用域以外被修改,通俗講就是一個全局的變量,這個全局的變量在其被定義後,能夠在所有上文中修改和使用。可是,global也是隨便被使用的,它也有一些本身的規則,當咱們在函數內部建立一個變量的時候,若是咱們想讓他變成一個全局變量,咱們須要使用關鍵字global定義它,可是若是咱們在函數外面定義的變量默認就是global的變量,不用在使用global關鍵字定義。git

如何使用global

首先我先嚐試一下以下代碼,咱們實現默認移動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)
相關文章
相關標籤/搜索