簡體   English   中英

從另一個模塊導入 function 時,命名空間的概念是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM