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
(是不可变的,所以你不能做任何事情来利用x
和dict_1['One']
是同一对象的别名(最初(。
有各种可怕的解决方案来做这样的事情(使dict_1
的值成为返回x
的lambda
,使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)
您希望数据源具有权威性。因此,应该有一个数据结构来保存值,然后代码转到该数据结构来获取值。为了方便起见,您可以将它们放在变量或其他数据结构中。