首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python中的def突变字典

使用python中的def突变字典
EN

Stack Overflow用户
提问于 2014-03-12 09:24:40
回答 3查看 600关注 0票数 0

我有一个字典(下面代码中的“唤醒”),其中的值是列表。

我想使用def更改每个列表的第二个元素,如下所示:

代码语言:javascript
复制
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)

你能帮帮我吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-12 09:36:55

在变量auto的声明中调用函数wakeup,并试图在函数auto中使用变量wakeup

因此,在实例化变量wakeup之前,您实际上是在尝试使用它。

首先,您需要决定变量wakeup的初始值。

代码语言:javascript
复制
wakeup = {'zone1': [15, zone1_def_val],
          'zone2': [15, zone2_def_val]}

然后,您可以在需要时调用函数auto

代码语言:javascript
复制
def auto(t):
    wakeup['zone1'][1] = wakeup['zone1'][0] - t

auto(2)
auto(3)
auto(5)
...
print wakeup

请注意,在访问字典中的元素时,需要使用[]而不是()

代码语言:javascript
复制
wakeup['zone1'] # good
wakeup('zone1') # bad
票数 2
EN

Stack Overflow用户

发布于 2014-03-12 09:28:37

auto与字典没有任何关系,您应该这样定义它。

代码语言:javascript
复制
def auto(n, t):
    return n - t

wakeup = {'zone1': [15, auto(15, 1)], 'zone2': [15, auto(15, 1)]}

但是,如果您的实际代码与此类似,则根本不需要函数。

票数 1
EN

Stack Overflow用户

发布于 2014-03-12 09:34:43

您的代码根本无效。

在函数中修改字典的最佳方法是将字典作为参数传递。

代码语言:javascript
复制
def auto(d, t):
    for l in d.values():
        l[1] = l[0] - t

wakeup = {'zone1': [15, 0],
          'zone2': [15, 0]}

auto(wakeup, 1)

如果您仍然希望修改字典,但不希望将它作为参数传递,请使用全局语法

代码语言:javascript
复制
def auto(t):
    global wakeup
    for l in wakeup.values():
        l[1] = l[0] - t

wakeup = {'zone1': [15, 0],
          'zone2': [15, 0]}

auto(1)

在这种情况下,由于您没有重新分配唤醒,所以您实际上并不需要全局的,但是最好始终使用它,就像尽量避免使用全局变量一样。

此代码有效:

代码语言:javascript
复制
def auto(t):

    for l in wakeup.values():
        l[1] = l[0] - t

wakeup = {'zone1': [15, 0],
          'zone2': [15, 0]}

auto(1)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22346987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档