在Python中导入变量?
我正在使用sympy编写上标,使用在Python中导入变量?,python,import,sympy,Python,Import,Sympy,我正在使用sympy编写上标,使用pretty\u print命令。为了使pretty_print命令能够工作,需要将其与一些变量(代数(x、y等)一起导入。如果不从sympy.abc导入变量(代数),则需要将字母放在引号'中,而在引号中,pretty\u print命令将不起作用 例如,如果我在屏幕上打印x²,我需要导入x,以便在程序中使用。像这样: import sympy from sympy import pretty_text as exp from sympy.abc im
pretty\u print
命令。为了使pretty_print命令能够工作,需要将其与一些变量(代数(x、y等)一起导入。如果不从sympy.abc导入变量(代数),则需要将字母放在引号'
中,而在引号中,pretty\u print命令将不起作用
例如,如果我在屏幕上打印x²
,我需要导入x
,以便在程序中使用。像这样:
import sympy
from sympy import pretty_text as exp
from sympy.abc import x
equation= x**2
exp(equation)
这将在屏幕上打印x²。问题是如果我给x赋值,那么它将不再等于它本身。如果我在从symphy.abc导入后直接打印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]
但这是无效的。那么,有什么方法可以导入不同的字母吗?如果您这样做:
import sympy.abc
x = sympy.abc.x
然后,无论何时需要原始值,只要使用sympy.abc.x
。如果需要动态获取名称:
getattr(sympy.abc, "x")
其中文字可以替换为任何变量。如果要保留符号,请不要为其指定任何值-继续使用符号,直到您真正需要解决方案 例如:
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 ⎠
只要需要,就以符号形式保留您的方程式,不要担心值本身。您不需要在SymPy中导入符号名称。abc模块只是为了方便使用一个字母的符号名称 只需使用您想要的任何名称创建Symbol对象(可以是任何字符串,包括动态创建的字符串) 还请注意,您为符号指定的名称与保存该符号的Python变量的名称不必相关。实际上,一个符号并不知道它绑定到什么Python变量名(这是Python中的一切工作方式,而不仅仅是Symphy) 您还可以使用
符号
一次创建多个符号
>>> x, y, z = symbols('x y z')
我理解您使用x=sympy.abc.x的第一部分,但是您能解释一下getattr(sympy.abc,“x”)如何将其用于变量吗?@Nick
getattr()
是一个内置的从对象获取属性的函数,因此如果您有一个具有名称
属性的类实例,inst.name
完全等同于getattr(inst,“name”)
-模块的工作方式相同getattr(symphy.abc,“x”)
是编写symphy.abc.x
的另一种方法,除了“x”
可以是任何变量,允许您动态获取不同的属性。我尝试过测试,当我尝试将“x”设置为变量时,它说属性必须是字符串。那么,如何使用此函数动态更改要导入的字母?@Nick该变量需要包含要导入的变量的名称,因此如果要导入变量sympy.abc.z
,请将该变量传递给getattr()
需要包含值'z'
。为什么我收到了一个-1?在引号中加上x将创建一个字符串,它是一个与符号完全不同的对象。在您的问题中存在许多误解。读取并查看是否清除了某些内容(尤其是变量部分)。此命令是从Symphy导入的吗?当我从Symphy导入它并尝试此操作时,我得到一个错误,即对象不可调用。是的,Symbol
和symbols
都是从Symphy导入的。
>>> x = Symbol('x')
>>> x
x
>>> x = Symbol('y')
>>> x
y
>>> x, y, z = symbols('x y z')