簡體   English   中英

不同模塊之間的全局變量

[英]Global Variables between different modules

main.py:

from module import *   
var=10

def func2():
    print "func2:" ,var

def main():
    global var
    var=20
    print "main - before", var
    func2()
    func1()
    print "main - after", var

if __name__=='__main__':
    main()

module.py

from main import *

def func1():
    global var
    print "func1:", var

程序打印:

主要-之前:20

func2:20

func1:10

主-20點后

“ var”是全局變量。 我希望當我更改var的值時,無論變量'var'出現在哪里,它都會被更改。 func1和func2之間的唯一區別是func1在另一個模塊中。 仍然,我不明白為什么func1和func2之間的'var'值不同。

python中沒有真正的全局變量。 對象綁定到名稱空間中的變量,並且global關鍵字引用當前模塊的名稱空間。 from somemodule import *在當前模塊的命名空間中創建新變量,並將它們引用到somemodule的對象。 現在,您有兩個不同的變量指向同一個對象。 如果您重新綁定其中一個變量,則其他變量將繼續引用原始對象。 此外,function.s的“全局”名稱空間是在其中定義的模塊,即使將其導入到其他模塊也是如此。

如果需要“全局”變量,請導入模塊並使用其名稱空間限定名稱,而不是在本地名稱空間中重新綁定各個變量。

這是一個帶注釋的示例...

cfg.py

var = 10
somelist = []
var2 = 1

def show_var2():
    print var2

main.py

import cfg
from cfg import *   # bind objects referenced by variables in cfg to
                    # like-named variables in this module. These objects
                    # from 'cfg' now have an additional reference here

if __name__ == '__main__':
    print cfg.var, var
    var = 20        # rebind this module's 'var' to some other value.
                    # this does not affect cfg's 'var'
    print cfg.var, var

    print '----'
    print cfg.somelist, somelist
    somelist.append(1)    # update this module's 'somelist'
                          # since we updated the existing object, all see it
    print cfg.somelist, somelist

    print '----'
    var2 = 2
    print var2, cfg.var2, show_var2() # show_var2 is in cfg.py and uses its
                                      # namespace even if its been imported
                                      # elsewhere

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM