我有一个字典(下面代码中的“唤醒”),其中的值是列表。
我想使用def更改每个列表的第二个元素,如下所示:
def auto(t):
wakeup('zone1')[1] = wakeup('zone1')[0] - t
wakeup = {'zone1': [15, auto(1)],
'zone2': [15, auto(1)]}
print wakeup它将无法工作,因为auto()在定义唤醒之前对唤醒进行了引用。
然而,如果我试图通过在唤醒定义之后使用def来修复这个问题,那么我仍然会得到一个错误,因为这次唤醒字典将在auto()定义之前对auto()进行引用。
理想情况下,我希望将这个语法保留在列表中: 15,auto(1)
你能帮帮我吗?
发布于 2014-03-12 09:36:55
在变量auto的声明中调用函数wakeup,并试图在函数auto中使用变量wakeup。
因此,在实例化变量wakeup之前,您实际上是在尝试使用它。
首先,您需要决定变量wakeup的初始值。
wakeup = {'zone1': [15, zone1_def_val],
'zone2': [15, zone2_def_val]}然后,您可以在需要时调用函数auto:
def auto(t):
wakeup['zone1'][1] = wakeup['zone1'][0] - t
auto(2)
auto(3)
auto(5)
...
print wakeup请注意,在访问字典中的元素时,需要使用[]而不是():
wakeup['zone1'] # good
wakeup('zone1') # bad发布于 2014-03-12 09:28:37
auto与字典没有任何关系,您应该这样定义它。
def auto(n, t):
return n - t
wakeup = {'zone1': [15, auto(15, 1)], 'zone2': [15, auto(15, 1)]}但是,如果您的实际代码与此类似,则根本不需要函数。
发布于 2014-03-12 09:34:43
您的代码根本无效。
在函数中修改字典的最佳方法是将字典作为参数传递。
def auto(d, t):
for l in d.values():
l[1] = l[0] - t
wakeup = {'zone1': [15, 0],
'zone2': [15, 0]}
auto(wakeup, 1)如果您仍然希望修改字典,但不希望将它作为参数传递,请使用全局语法
def auto(t):
global wakeup
for l in wakeup.values():
l[1] = l[0] - t
wakeup = {'zone1': [15, 0],
'zone2': [15, 0]}
auto(1)在这种情况下,由于您没有重新分配唤醒,所以您实际上并不需要全局的,但是最好始终使用它,就像尽量避免使用全局变量一样。
此代码有效:
def auto(t):
for l in wakeup.values():
l[1] = l[0] - t
wakeup = {'zone1': [15, 0],
'zone2': [15, 0]}
auto(1)https://stackoverflow.com/questions/22346987
复制相似问题