【问题标题】:Python target a variable given the stringPython针对给定字符串的变量
【发布时间】:2019-01-31 21:52:03
【问题描述】:

编辑:一般的想法是使用 %store 魔法将所有变量存储在我的 Jupyter Notebook 中,以便使用 %store -r 将它们全部返回到下一个会话。

我正在尝试使用:

% store

我需要存储变量。与:

dir()

我获得了一个字符串列表,其中包含我在该行之前创建的所有变量名称:

['a','b','c']

有没有办法执行:

%store a
%store b
%store c

知道变量的字符串吗? 我试过这个:

for i in dir():
    %store eval(i)

但它给出:UsageError: Unknown variable 'eval(i)' 我该如何处理?有没有办法保存 Jupyter Notebook 中的所有本地环境以备下次使用?

编辑:

for i in dir():
    %store locals()[i]

给出:UsageError: Unknown variable 'locals()[i]'

【问题讨论】:

  • 要存储吗?
  • 你不能直接调用函数吗(你必须查找文档,但大概%store i 只是调用类似StoreMagics.store('i', i) 的东西)?或者您是否需要为此实际使用 %magic?

标签: python string variables jupyter-notebook store


【解决方案1】:

按照@abarnert 的建议,您可以以编程方式运行魔法线,例如:

In []:
import IPython
store = IPython.get_ipython().find_line_magic('store')

a = b = c = 10
for i in ['a', 'b', 'c']:
    store(i)

Out []:
Stored 'a' (int)
Stored 'b' (int)
Stored 'c' (int)

尝试使用%store 执行此操作的问题在于,传递给它的字符串没有被评估而是直接在范围内查找,因此出现错误Unknown variable 'eval(i)'

【讨论】:

  • 它似乎有效,但如果我尝试在 dir() 或 locals() 的循环中使用它,它会给我TypeError: can't pickle module objects。虽然它用tryexcept存储主要的东西
猜你喜欢
  • 1970-01-01
  • 2019-04-14
  • 1970-01-01
  • 2018-07-03
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
相关资源
最近更新 更多