数式を表す長い文字列 (それぞれ 9000 文字以上) が多数あります。私は元々、Python のシンボリック代数パッケージである sympy を使用して式を生成しました。切り捨てられた例は次のとおりです。
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])'
文字列内のテキストをコピーしてから is as code を使用します (つまり、' と ' の間のテキストをコピーしてから、コードとして関数に貼り付けます):
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])
長いコード行は扱いにくくなり、IDE (Spyder) の速度が低下するため、いくつかの改行を挿入したいと考えています (コードは 1 つの長い行として正常に動作します)。式を括弧で囲み、自分で改行を挿入することで、手動でこれを成功させました (つまり、 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]))
改行を挿入する関数または機能が欲しいです。モジュールを使用してみましtextwrap
たが、行が不適切な場所に分割されます。たとえば、以下のコードでは、最後の行が「レイヤー」の途中で分割され、数式が無効になります。
>>> 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 -
zt[layer]*m[j]**4)**(-1)*ab[layer]*sin(m[i]*zb[layer])*sin(m[j]*zb[lay
er])
文字列を手動で分割し、文字列をコードとして貼り付けたときに有効な式を保持するための私の経験則は次のとおりです。
- 式全体を で囲み
()
ます。 - 空白または , , , の後に約 70 文字幅で
+
分割-
します。*
]
)