我有很多长字符串(每个字符9000多个字符)代表数学表达式.我最初使用sympy生成表达式,这是一个python符号代数包.一个截断的例子是:
a = 'm[i]**2*(zb[layer]*m[i]**4 - 2*zb[layer]*m[j]**2*m[i]**2 + zb[layer]*m[j]**4 - zt[layer]*m[i]**4 + 2*zt[layer]*m[j]**2*m[i]**2 - zt[layer]*m[j]**4)**(-1)*ab[layer]*sin(m[i]*zb[layer])*sin(m[j]*zb[layer])'
Run Code Online (Sandbox Code Playgroud)
我最终复制字符串中的文本,然后使用is作为代码(即在'和'之间复制文本,然后将其粘贴到函数中作为代码):
def foo(args):
return m[i]**2*(zb[layer]*m[i]**4 - 2*zb[layer]*m[j]**2*m[i]**2 + zb[layer]*m[j]**4 - zt[layer]*m[i]**4 + 2*zt[layer]*m[j]**2*m[i]**2 - zt[layer]*m[j]**4)**(-1)*ab[layer]*sin(m[i]*zb[layer])*sin(m[j]*zb[layer])
Run Code Online (Sandbox Code Playgroud)
长行代码变得笨拙并且使我的IDE(Spyder)变慢,所以我想放入一些换行符(代码可以正常工作一条长行).我已成功完成此操作,方法是将表达式括在括号中并自行放入换行符(即根据PEP8使用隐式行连接):
def foo(args):
return (m[i]**2*(zb[layer]*m[i]**4 - 2*zb[layer]*m[j]**2*m[i]**2 +
zb[layer]*m[j]**4 - zt[layer]*m[i]**4 + 2*zt[layer]*m[j]**2*m[i]**2 -
zt[layer]*m[j]**4)**(-1)*ab[layer]*sin(m[i]*zb[layer])*sin(m[j]*zb[layer]))
Run Code Online (Sandbox Code Playgroud)
我想要一些功能或功能,将为我提供换行.我已经尝试过使用该textwrap模块但是将该行拆分为不合适的地方.例如,在下面的代码中,最后一行在"layer"的中间分割,这使我的数学表达式无效:
>>> import textwrap
>>> a = 'm[i]**2*(zb[layer]*m[i]**4 - 2*zb[layer]*m[j]**2*m[i]**2 + zb[layer]*m[j]**4 - zt[layer]*m[i]**4 + 2*zt[layer]*m[j]**2*m[i]**2 - zt[layer]*m[j]**4)**(-1)*ab[layer]*sin(m[i]*zb[layer])*sin(m[j]*zb[layer])'
>>> print(textwrap.fill(a,width=70))
m[i]**2*(zb[layer]*m[i]**4 - 2*zb[layer]*m[j]**2*m[i]**2 +
zb[layer]*m[j]**4 - zt[layer]*m[i]**4 + 2*zt[layer]*m[j]**2*m[i]**2 - …Run Code Online (Sandbox Code Playgroud)