我应该将sympy符号传递给函数



不将Synspy符号传递给函数有任何缺点?

def compute(alpha,a): #or def compute(a)
    return 3*alpha+a
alpha = sympy.symbols("alpha")
expr = compute(alpha,3)

我不必将alpha传递给compute()(我认为它是一个全局变量(,现在,我认为当我遗漏它时,它可以使代码更好地阅读。这被认为是不良设计吗?我想这是一个普遍的"如何处理python中的全球变量"问题,如这里所述,答案说这将取决于特定的用户酶。

我仍然必须在调用该函数之前创建alpha符号,如果我不包括它,这并不明显。

与列表(另一个问题(相反,Sympy将符号(和表达式(视为不变的。此外,将它们传递给Symbolsymbols的字符串唯一识别。为了插图,请考虑以下内容:

from sympy import Symbol
print({Symbol("a"), Symbol("a")})
>>> {a}

因此,将Sympy符号声明为全局变量并不会构成如此大的问题 - 就像在全球定义了一些数学常数一样。例如,使用此符号的某些合理的代码会改变它。

因此,根据上下文,对:

是有意义的
  1. 全球定义alpha
  2. alpha作为参数传递给该功能,
  3. 在每个呼叫的函数中定义alpha(这是可能的,因为符号仅取决于关联的字符串(。

没有进一步的上下文,不可能说适用于您的情况。


¹请注意,不合理的代码仍然可以执行此操作,例如:

from sympy.abc import a
from sympy.abc import a as a_2
a.name = "b"
print(a_2)
>>> b   

在文件顶部定义常用的符号(即全球(是一个很好的练习。正如其他人指出的那样,即使再次定义了它,也不会真正重要,因为两个具有相同名称的符号被认为是平等的。在这里一个重要的警告:如果您使用real=True等假设,那确实很重要。因此,您应该避免使用两个具有相同名称但不同假设的符号。

在您的示例中,如果alpha总是应该是符号Symbol('alpha'),那么将参数与永不更改的函数进行参数是没有意义的。


另一种方法,您可以完全没有函数,而只是使用符号变量的表达式

alpha, a = symbols('alpha a')
expr = 3*alpha + a

,然后在要替换值时使用subs

expr.subs({a: 3}) # or expr.subs(a, 3)

相关内容

  • 没有找到相关文章

最新更新