[英]What is the concept of namespace when importing a function from another module?
主要.py:
from module1 import some_function
x=10
some_function()
模塊1.py:
def some_function():
print str(x)
當我執行main.py
時,它在 moduel1.py 中給出一個錯誤,表明 x 不可用。
我的理解是,在模塊main.py
中使用from x import y
會在 main.py 的本地命名空間中帶來 xy 的定義/值。 由於 function 定義和變量 x 都在 main.py 的本地命名空間中,因此它應該可以正常工作。 但這似乎是不正確的低估。 那么這里的確切概念是什么? 任何指向此概念的官方 python 文檔的鏈接?
每個模塊都有自己的全局名稱空間。
from module1 import some_function
x=10
some_function()
some_function
在其定義中使用module1.x
,但您在當前模塊中設置x
。 這會起作用:
from module1 import some_function
import module1
module1.x = 10
some_function()
請注意,您不能使用from module1 import x
,然后設置x = 10
,因為該import
只是將新名稱x
初始化為與module1.x
具有相同的初始值; x = 10
然后給新變量一個新值。
冒着聽起來輕率的風險,規則很簡單:如果名稱尚未在模塊中定義,則它根本不存在。
看這個模塊:
def some_function():
print str(x)
它沒有定義x
,因此該模塊中不存在該名稱。 如果您在另一個模塊中定義x
,它仍然不會存在於該模塊中。 即使您將此模塊導入到定義x
的另一個模塊中, x
仍然不會存在於此模塊中。
沒有“全局global
”命名空間。 每個模塊都有自己的global
命名空間。 名稱永遠不會在模塊之間隱式共享,它們必須始終顯式導入。
唯一的例外是builtins
,為方便起見,不需要顯式導入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.