因爲如果變量名稱在函數中被賦值給它們,並且我想從函數內部訪問模塊變量,那麼我可以在模塊中導入模塊名稱,然後使用它來訪問模塊變量?python:我可以在模塊本身內導入模塊名稱空間嗎?
實例(文件名:server.py):
import server
bar = 5
def foo():
server.bar = 10
因爲如果變量名稱在函數中被賦值給它們,並且我想從函數內部訪問模塊變量,那麼我可以在模塊中導入模塊名稱,然後使用它來訪問模塊變量?python:我可以在模塊本身內導入模塊名稱空間嗎?
實例(文件名:server.py):
import server
bar = 5
def foo():
server.bar = 10
除了使用global
聲明,在所有其他的答案中建議,不使用模塊但是作爲容器的一個類或者僅用於全局的另一個模塊:
# mg.py
bar = 5
# server.py
import mg
def foo():
mg.bar = 10
或
class mg:
bar = 5
def foo():
mg.bar = 10
這樣你就不需要把global
語句隨處可見,你可以重新使用這些名稱,很明顯你指的是哪個bar
。
編輯:此外,可以在模塊內部導入模塊,但不能以這種方式更改主模塊中的變量。因此,這會工作:
# selfimport.py
import selfimport
def foo():
print selfimport.foo
bar = 3
if __name__ == '__main__':
print selfimport.bar
foo()
但這並不:
# selfimport.py
import selfimport
bar = 3
def foo():
selfimport.bar = 5
if __name__ == '__main__':
print selfimport.bar
foo()
print bar # bar is still 3!
如果你只使用全局常數,你就不需要global
聲明反正。您還需要確保在上面的if
語句中僅包含您想要在主模塊中執行的代碼,否則您將進行遞歸。
爲什麼不:
def foo():
global bar
bar = 10
沒有,而不是使用全局聲明:
def foo():
global bar
bar = 10
你不想只訪問,你想改變它們。那麼自然會產生這樣的問題:你爲什麼要這樣做,而不是使用''global''語句,而這恰恰是爲了允許這樣做呢? – eyquem
您對「變量」一詞的使用不正確。在其他語言中有變量,這個詞是從內存的_chunk像一個盒子,其內容可以改變的意義上被採用的,但不是在Python中。 Python中沒有盒子變量,_all是object_。 Python中單詞'variable'的唯一可接受的用法是指定對象的名稱,這是我在官方文檔中看到的唯一含義。但有一個特定的詞:'標識符'。所以沒有理由在Python上下文中使用含糊不清的混淆詞「變量」。 – eyquem
_你不想只訪問,你想改變他們,說我。但這是我的假設。事實上,你的代碼的動機是未知的,因爲它是不完整的。你想用'server.bar = 10''指令獲得什麼? 「爲什麼?'是理解你想獲得的東西的第二要素 – eyquem