当函数内部的变量发生变化时,如何更新字典值


x = 2
dict_1 = {'One': x}
def my_fun():
global x
x = 1
my_fun()
print('x is: ', x, '| dict_1 is :', dict_1)

输出为:

x is:  1 | dict_1 is : {'One': 2}

如何在字典值中反映变量的变化?

执行dict_1['One'] = x = 1以便重新分配两者?没有什么神奇的方法可以实现这一点;一旦构造了dict_1,它就与名称x没有进一步的关系,并且x所指的对象(int(是不可变的,所以你不能做任何事情来利用xdict_1['One']是同一对象的别名(最初(。

有各种可怕的解决方案来做这样的事情(使dict_1的值成为返回xlambda,使dict_1成为用当前x构造dict的函数,使用模块级__getattr__而不是定义dict_1,从而加载dict_1得到新构造的dict,等等(,但所有这些都需要一些额外的步骤,这些步骤会使print('x is: ', x, '| dict_1 is :', dict_1)不能像编写的那样工作,或者使dict_1不持久,或者两者兼而有之。

我不确定你的问题中有什么限制,也不确定你到底想实现什么,但解决问题的一种方法是调整你的代码,使其看起来像这样:

global x, dict_1
x = 2
dict_1 = {'One': x}
def my_fun():
dict_1['One'] = x
x = 1
my_fun()
print('x is: ', x, '| dict_1 is :', dict_1)

我想大多数人都会这样做。关键字"global"很少合适。

x = 2
dict_1 = {'One': x}
def my_fun(dictionary):
dictionary['One'] = 1
return dictionary
dict_1 = my_fun(dict_1)
x = dict_1['One']
print('x is: ', x, '| dict_1 is :', dict_1)

您希望数据源具有权威性。因此,应该有一个数据结构来保存值,然后代码转到该数据结构来获取值。为了方便起见,您可以将它们放在变量或其他数据结构中。

最新更新