[英]Python: setting variables that belong to the namespace of an imported module
說我有一個模塊params.py
,其中聲明了一堆變量:
a = 0.2
b = 0.4
...
在使用此模塊時,我想使用*導入其命名空間,以便於引用。 但是在那種情況下,我似乎只能訪問參數的值,但無法重置它們:
from params import *
def test1():
print(a) #this works: printing out the value of params.a
def test2():
a= 0.5 #doesn't work: does not change the value of params.a
嘗試將變量引用為params.a = 0.5
也不起作用(給出NameError,因為未定義“ params”)
我的問題:如何設置/重置以這種方式導入的變量的值?
在test2()
范圍內分配a = 0.5
僅對該函數本地。
您要做的是在模塊上設置屬性。
例:
import params
def test1():
print(params.a)
def test2():
params.a = 0.5
請參閱: Python范圍規則的簡短描述
注意:認識到Python中的幾乎所有東西都是某種對象,通常都具有屬性,這可能會有所幫助。 這包括模塊,類,類的實例,函數等。
更新:不鼓勵這樣做將“完全”執行您的預期:
foo.py:
from params import * # noqa
def test1():
print(a)
def test2():
global a
a = 0.5
params.py:
a = 1
演示:
$ python -i foo.py
>>> test1()
1
>>> test2()
>>> test1()
0.5
>>>
更新II:但是我也要指出,正如我的評論中所述,這實際上並沒有改變params.a
參考。 看到:
$ python -i foo.py
>>> id(params.a)
140602494749016
>>> id(a)
140602494749016
>>> test1()
1
>>> test2()
>>> test1()
0.5
>>> id(params.a)
140602494749016
>>> id(a)
140602494760472
>>>
摘要:請一般使用此處介紹的第一個選項。
好吧,對我來說,最簡單的解決方案是為同一模塊提供2條import語句:
from params import *
import params
第一條語句使我可以訪問變量的值,而不必以"params."
為前綴"params."
,第二個允許我在需要時重新綁定變量
params.a = 0.5
我不知道這是否符合最佳做法(可能不符合)。 據我所知,它確實可以完成工作。 歡迎其他建議。
編輯:這不起作用,因為值a
不會反映更新的價值:
print(a) #say it prints 0.2
params.a = 0.5
print(a) # will still print 0.2
print(params.a) #will print 0.5
因此,這里的教訓是,如果使用from params import a
變量,那么即使原來的變量發生a
變化,您也會from params import a
的值。 即它是按值而不是按引用的導入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.