gpt4 book ai didi

python - 如何从字典中分配全局变量?

转载 作者:行者123 更新时间:2023-12-02 17:22:37 26 4
gpt4 key购买 nike

这是我的字典:

vimvar = {'startline'   : [ 'startline' , 'int(vim.eval("s:StartLine"))'  ],
'startline-1' : [ 'startline' , 'int(vim.eval("s:StartLine"))-1'],
'endline' : [ 'endline' , 'int(vim.eval("s:EndLine"))' ],
'gcase' : [ 'gCASE' , 'vim.eval("g:CASE")' ],
'akeyw' : [ 'akeyw' , 'vim.eval("a:keyw")' ]
}

这是我的 list :

importlist = ['startline', 'gcase', 'akeyw']

我想做的是检查 importlist 中的值是否作为键出现在 vimvar 字典中。

如果是:

  1. 子列表中第一个字段(与键关联)的值必须是一个新的全局变量。

  2. 必须执行子列表中第二个字段的值(与键关联)。它从我的文本编辑器 vim 导入一个变量。

我创建了这段代码来实现上面的内容:

  for n in importlist:
for key,val in vimvar.items():
if n in vimvar:
exec('global ' + vimvar[key][0])
exec(vimvar[val][0] + '=vimvar[val][1]')

但是无论我做什么都会出错

undefined variable 'sa'

undefined variable 'gCASE', unhashable type list

等等

我做错了什么?

最佳答案

两个问题:

首先,你循环了两次,而你只需要循环一次:

for n in importlist:
if n in vimvar:
name, val = vimvar[n]
...

其次,您不需要使用exec() 进行赋值。分配给容器对象(推荐):

data = {}
for n in importlist:
if n in vimvar:
name, val = vimvar[n]
data[name] = exec(val)

或者更改 globals() 字典(如果您真的需要它成为一个全局变量):

for n in importlist:
if n in vimvar:
name, val = vimvar[n]
globals()[name] = exec(val)

如果可以,尽量避免将其存储在全局变量中。并且只在您可以信任的字符串上使用 exec() ,是否有任何原因导致此代码不能出现在您的源代码中?例如

vimvar = {
'startline': ['startline', int(vim.eval("s:StartLine"))],
'startline-1': ['startline', int(vim.eval("s:StartLine"))-1],
'endline': ['endline', int(vim.eval("s:EndLine"))],
'gcase': ['gCASE', vim.eval("g:CASE")],
'akeyw': ['akeyw', vim.eval("a:keyw")]
}

for n in importlist:
if n in vimvar:
name, val = vimvar[n]
globals()[name] = val

关于python - 如何从字典中分配全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41555953/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com