从一个python文件到另一个文件使用全局变量

时间:2020-02-07 16:50:51

标签: python python-3.x

我在一个文件夹中创建了3个python文件。以下是每个文件及其内容:

one.py

products="testvar"
def oneFn():
    global products
    products=[1,2,3,4,5]
    print("one Function")

two.py

import one

def twoFn():
    one.products.append(100)
    print(one.products)
    print("two Function")

test.py

from one import *
from two import *

if __name__=="__main__":
    oneFn()
    twoFn()
    print(products) # testvar
    print(one.products) # [1,2,3,4,5,100]

为什么产品一个产品返回不同的值?

1 个答案:

答案 0 :(得分:3)

from one import *将所有导出的名称从模块one拉入当前名称空间。通过在本地名称空间中创建(或覆盖)变量(该变量(最初)引用与导入模块中的变量相同的对象)来做到这一点。

但是,仍然可以为主模块中的变量分配不同的值,而不会影响导入模块中的引用,反之亦然。

如果在导入后在模块中 中重新分配了变量,则该修改将在导入模块中不可见。

因此,在oneFn()中,您将覆盖products模块中的one参考。这不会影响主模块中的products引用。

global中的oneFn()只是使函数中的products引用外部命名空间中的那个,并且或多或少无关紧要。您所经历的行为。如果你写

from one import products
import one
one.products = 'othervalue'

您仍然可以在本地获得products == 'testvar'