【问题标题】:is there a way to instantiate variables from iterated output in python?有没有办法从 python 中的迭代输出实例化变量?
【发布时间】:2014-06-28 01:28:31
【问题描述】:

假设我有一个清单 my_list = ['a','b','c'] 我有一组价值观 my_values = [1,2,3]

有没有办法遍历我的列表并将 my_list 的值设置为等于 my_values

for i in range(len(my_list)):

    ## an operation that instantiates my_list[i] as the variable a = my_values[i]

...
>>> print a
1

我只想这样做,而不是将保存程序的文件文本复制到新文件中,将新行作为字符串插入到程序中需要进入的位置。如果可能的话,我想跳过创建、重命名、销毁、文件操作,因为我正在处理大量的东西。

【问题讨论】:

  • 不要这样做。你会后悔的。使用字典。
  • 感谢@Eevee 的警告。我知道,这看起来超级愚蠢,但它不是针对专业项目的,并且会非常安全地被沙盒化。

标签: python variables scope


【解决方案1】:

这可能是你不应该做的黑客行为,但由于 globals() 字典中包含所有全局变量,你可以将它们添加到模块的全局字典中:

>>> my_list = ['a','b','c']
>>> my_values = [1,2,3]
>>> for k, v in zip(my_list, my_values):
...     globals()[k] = v
... 
>>> a
1
>>> b
2
>>> c
3

但请注意,最好不要将命名空间与变量值混用。我看不出有什么好的结果。

我建议使用普通 dict 来存储您的值,而不是将它们加载到全局或本地命名空间中。

【讨论】:

  • 太棒了!完全有效。这为我省去了很多令人头疼的工作。也不知道全局变量是这样存储的。这很酷,当我完成我的变量时,我什至可以“del globals [key]”。当我的声望超过 15 时,我一定会回来投票给你。
  • 告诉过你我会回来的!
猜你喜欢
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
  • 2012-01-12
  • 2021-12-15
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多