我知道在 python 中,變數不是存盤位置,而只是一個指向其他地方的值的名稱。因此我們不能做這樣的事情:
foo = 1
bar = foo
foo = 2
并期望bar更新到 2。
但是我想知道我們是否可以將“名稱” foo 存盤在字典中并更新名稱指向的位置。我知道以下內容不起作用,但類似于:
foo = 1
bar = 2
dict_of_var = {
"foo": foo,
"bar": bar,
"baz": baz
}
with open(path, 'r') as f:
f_dict = json.load(f)
for key, val in dict_of_var.items():
val = f_dict[key]
而不是手冊:
with open(path, 'r') as f:
f_dict = json.load(f)
foo = f_dict["foo"]
bar = f_dict["bar"]
baz = f_dict["baz"]
這是否可能,無論是通過這種方式還是其他方式?
uj5u.com熱心網友回復:
您可以使用內置函式globals()和locals()來實作這一點。
>>> foo = 1
>>> foo
1
>>> g = globals()
>>> g["foo"] = 3
>>> foo
3
不過,修改 locals() 是個壞主意。修改 globals() 可能沒問題(因為它總是指向同一個字典),但因為它處理全域變數,所以它也是一個壞主意。
我覺得這是一個 XY 案例,但沒有確切的用例,這是我能提供的唯一答案。
uj5u.com熱心網友回復:
這不是我所追求的,但“解決方法”可能是存盤一個 setter 方法來更新變數。這并不比手動分配變數更優雅,但在技術上確實有效
foo = 1
bar = 2
def set_foo(val):
global foo
foo = val
def set_bar(val):
global bar
bar = val
dict_of_var = {
"foo": set_foo,
"bar": set_bar
}
with open(path, 'r') as f:
f_dict = json.load(f)
for key, val in f_dict.items():
dict_of_var[key](val)
uj5u.com熱心網友回復:
Python 并不真正使用指標。python 中的所有內容或多或少都是使用字典和陣列構建的。
因此,您通常會將所有變數保存在字典中,或者使用邏輯或回圈以某種方式將其移動到另一個變數。
還有一種更簡單的方法來處理字典。本教程是開始學習基礎知識的好地方。
這是一篇關于python中指標的有趣文章。它們不存在的主要原因是 python 并不像 C 或 C 那樣低級。
some_dict = {"foo": "a value", "bar": "another value"}
print(some_dict["foo"])
# a value
# in the case of what you're trying to achieve, you would keep
# it in a dictionary as the values are where they already need
# to be (remember, python doesn't have any memory management)
# should you really want to set the variables you could use this
# very inefficient method
foo: str # this really does nothing since it's python xd
bar: str
for key in some_dict:
if key == "foo":
foo = some_dict[key]
elif key == "bar"
bar = some_dict[key]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/454575.html
