假設我有一個Python中的模塊foo
,它具有函數bar()
和模塊x = 'spam'
中的全局變量。 bar()
使用此x進行操作。Python模塊範圍
如果我導入foo
就像import foo
,然後撥打foo.bar()
,這很明顯會發生什麼。
但是,如果我輸入bar()
僅是這樣的:from foo import bar
,我叫bar()
,會發生什麼,如果我也有我的全局命名空間的變量x
?
foo.py
x = 'spam'
def bar():
print x
main.py
from foo import bar
x = 'eggs'
bar()
如果我這個替代進口線:from foo import bar, x
?
編輯:(在這兩個情況下,它打印「垃圾郵件」,問題是爲什麼呢?)
你爲什麼不試試看? –
我做到了,很明顯,我對此感興趣。 :) – Mkoch
來自foo import x的語句查找'foo.x'的值,並將'main'的局部名稱空間中的'x'綁定到它找到的值。變量'foo.x'和'main.x'是** distinct **,但碰巧保持相同的值。爲其中一個分配不同的值不會影響另一個值。 [我不能將此作爲答案發布,因爲問題已關閉]。 – tom