首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当zeta用作较大表达式中的变量名时,parse_expr失败

当zeta用作较大表达式中的变量名时,parse_expr失败
EN

Stack Overflow用户
提问于 2018-11-08 23:17:52
回答 1查看 177关注 0票数 1

我在python3.6.6中使用了渐近1.3,并试图使用sympy_parser.parse_expr从字符串创建一个渐近表达式。在'zeta'中这样做很好,但是使用'zeta + 1'会产生一个类型错误:

代码语言:javascript
复制
  File "/home/user/.local/lib/python3.6/site-packages/sympy/core/expr.py", line 1023, in as_terms
    coeff, _term = term.as_coeff_Mul()
TypeError: as_coeff_Mul() missing 1 required positional argument: 'self'

以下是如何生成此消息:

代码语言:javascript
复制
from sympy.parsing.sympy_parser import parse_expr
parse_expr('zeta+1')

我认为这是将zeta解释为一个函数(错误信息对我来说并不清楚)。我还尝试将global_dict设置为:parse_expr('zeta+1', global_dict={}),但是这失败了,因为它说没有定义Symbol。我可以遍历并将Symbol (和Integer)添加到我的自定义global_dict中,然后它会正确地解析,但这对我来说似乎很难看(我还需要添加其他支持通用表达式(比如Float) )。

有更干净的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-09 00:52:15

在SymPy中,zeta表示Riemann函数,所以这就是字符串的解释方式。但是zeta + 1不是一个有效的SymPy表达式,因为不能向函数中添加一个数字(zeta(x) + 1会被接受)。

解决方案:在这里使用local_dict参数告诉SymPy zeta的真正含义。不要乱搞global_dict;无论如何,本地优先于全局。

代码语言:javascript
复制
from sympy import symbols
zeta = symbols('zeta')
parse_expr('zeta + 1', local_dict={'zeta': zeta})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53217611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档