被導入到導入者作用域的名字

只從模塊導入名字的另一個副作用就是那些名字會成爲局部名稱空間的一部分。

這可能導致覆蓋一個已經存在的具有相同名字的對象。

而且對這些變量的改變隻影響他的局部拷貝而不是所導入模塊的原始名稱空間。


這裏我們提供了兩個模塊代碼:一個導入者,impter.py和一個被導入者imptee.py。

impter.py使用import from 語句只創建了局部綁定。

foo = 'abc'
def show():
    print("foo from imptee:",foo)
show()



impter.py

from imptee import foo,show
show()
foo=123
print("foo from impter :",foo)
show()
運行導入者程序,我們發現從被導入者的觀點看,它的foo變量沒有改變,即使我們在importer.py裏面修改了它。

foo from imptee: abc
foo from imptee: abc
foo from impter : 123
foo from imptee: abc


唯一的解決方法就是使用import和完整的標識符名稱(句點屬性標識)

import imptee
imptee.show()
imptee.foo=12
print("foo from impter :",imptee.foo)
imptee.show()

foo from imptee: abc
foo from imptee: abc
foo from impter : 12
foo from imptee: 12

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章