【问题标题】:Pickle and evaluation of sympy expressionsPickle 和 sympy 表达式的评估
【发布时间】:2017-04-05 19:36:21
【问题描述】:

我的问题是 sympy 表达式的酸洗/取消酸洗可能不会返回初始表达式,如下例所示

>>>with evaluate(False) : x = atan(sqrt(3))
>>>x
atan(sqrt(3))
>>> y = pickle.dumps(x)
>>> z = pickle.loads(y)
>>> z
pi/3

有没有办法避免过程中的评估?

动机是我需要将 sympy 表达式添加到 Django 中的 request.session 对象,而不会在此过程中对其进行更改。

【问题讨论】:

  • 这听起来像是在 evaluate(False) 上下文中解封可能会有所帮助。不过,我还没有尝试过,我不知道 unpickling 是否应该默认以这种方式运行。
  • 确实有效,谢谢!在 django 上下文中,这意味着在 evaluate(False) 上下文中从 request.session 检索值。
  • 听起来可能存在线程安全问题,不同线程试图进入和离开evaluate(False) 上下文相互冲突。

标签: python django pickle sympy


【解决方案1】:

user2357112 的评论回答了这个问题。

>>>with evaluate(False) : x = atan(sqrt(3))
>>>x
atan(sqrt(3))
>>> y = pickle.dumps(x)
>>> with evaluate(False) : z = pickle.loads(y)
>>> z
atan(sqrt(3))

【讨论】:

    猜你喜欢
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多