在Python中导入变量?
我正在使用sympy这个库来通过pretty_print
命令写上标。为了让这个命令正常工作,我需要先导入一些变量(比如代数中的x、y等)。如果不从sympy.abc导入这些变量,使用pretty_print
命令时就得把字母放在引号里''
,这样命令就无法正常工作。
举个例子,如果我想在屏幕上打印x²
,我就需要导入x
,这样它才能在程序中使用。像这样:
import sympy
from sympy import pretty_text as exp
from sympy.abc import x
equation= x**2
exp(equation)
这样就能在屏幕上打印出x²。问题是,如果我给x赋了一个值,它就不再等于它自己了。如果我在从sympy.abc导入后直接打印x,它会这样做:
(假装这是IDLE)>
>>> import sympy
>>> from sympy import pretty_text as exp
>>> from sympy.abc import x
>>> x
x
但是如果我把x设为1
>>> import sympy
>>> from sympy import pretty_text as exp
>>> from sympy.abc import x
>>> x
x
>>> x = 1
>>>x
1
那么我需要再次对x
进行平方运算,
>>> import sympy
>>> from sympy import pretty_text as exp
>>> from sympy.abc import x
>>> x
x
>>> x = 1
>>>x
1
>>> equation = x**2
>>> exp(equation)
1
结果只会平方1。即使我尝试把x = 'x'
再赋值一次,它也不一样,因为它周围有''
。我只能通过再次导入来解决这个问题。不过,在我的程序中,我可能需要再次导入任何字母,所以我需要导入一个变量。我试过
from sympy.abc import x[0]
但那是无效的。那么,有没有办法让我导入一个变化的字母呢?
3 个回答
如果你这样做:
import sympy.abc
x = sympy.abc.x
那么每当你需要原来的值时,只需使用 sympy.abc.x
。如果你需要动态获取一个名字:
getattr(sympy.abc, "x")
这里的字面量可以被任何变量替代。
在SymPy中,你不需要导入符号名称。abc模块只是为了方便使用一个字母的符号名称。
你只需要用你想要的任何名称来创建Symbol对象(这个名称可以是任何字符串,包括动态生成的名称)。
>>> x = Symbol('x')
>>> x
x
另外,你给符号起的名字和存放这个符号的Python变量名并不需要有关系。实际上,一个Symbol并不知道它绑定了哪些Python变量名(这也是Python的工作方式,不仅仅是SymPy)。
>>> x = Symbol('y')
>>> x
y
你还可以使用symbols
一次性创建多个符号。
>>> x, y, z = symbols('x y z')
如果你想保留符号,就不要给它们赋值——继续使用符号,直到你真的需要解决方案的时候。
举个例子:
In [15]: equation=sympy.sin(x**2)
In [16]: exp(equation)
⎛ 2⎞
sin⎝x ⎠
In [17]: result = equation.subs({'x': 2})
In [18]: result
Out[18]: sin(4)
In [19]: result.evalf()
Out[19]: -0.756802495307928
这并没有改变x
本身——之后:
In [23]: exp(sympy.log(x**.5))
⎛ 0.5⎞
log⎝x ⎠
尽量保持你的方程式是符号形式,直到你需要的时候再去关心具体的数值。