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

标签 python python-3.x dictionary vim global-variables

这是我的字典:

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/

相关文章:

python - 将列表转换为字典列表

python - 按名称填写缺失值。 Pandas

python - 更改自动插入到 tkinter 小部件中的文本的颜色

Java 8 List<V> 到 Map<K, V> 与函数

python - 如何在本地运行 Cloud Run 服务?

python - Cython:控制cythonize停止将编译后的 `.c`文件从 `.pyx`文件放入安装目录

Python discord bot 警告特定的人

python - numpy 矩阵乘法到三角形/稀疏存储?

python - 单进程代码执行速度比多进程代码快 - MCVE

javascript - Typescript - 如果 map 内有条件