我在一个文件夹中创建了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]
为什么产品和一个产品返回不同的值?
答案 0 :(得分:3)
from one import *
将所有导出的名称从模块one
拉入当前名称空间。通过在本地名称空间中创建(或覆盖)变量(该变量(最初)引用与导入模块中的变量相同的对象)来做到这一点。
但是,仍然可以为主模块中的变量分配不同的值,而不会影响导入模块中的引用,反之亦然。
如果在导入后在模块中 中重新分配了变量,则该修改将在导入模块中不可见。
因此,在oneFn()
中,您将覆盖products
模块中的one
参考。这不会影响主模块中的products
引用。
global
中的oneFn()
只是使函数中的products
引用外部命名空间中的那个,并且或多或少无关紧要。您所经历的行为。如果你写
from one import products
import one
one.products = 'othervalue'
您仍然可以在本地获得products == 'testvar'
。