python - 为什么用具有相同名称但不同符号名称的变量替换表达式中的变量不起作用
问题描述
如何用初始变量的新定义替换函数中的变量?
import sympy as sy
g, a, x = sy.symbols("g a x")
g = 5*a*x
此时在解释器中输入 g 会打印:
5*a*x。
现在我想用 alpha 替换打印的 a。为什么以下不起作用?
a = sy.symbols("alpha")
g = g.subs(a,a)
我很清楚我可以使用以下内容:
import sympy as sy
g, a, x = sy.symbols("g a x")
g = 5*a*x
alpha = sy.symbols("alpha")
g = g.subs(a,alpha)
但我想了解为什么前一种方法不起作用。一般来说,我对分配的名称 a= 和符号(“a”)中的字符串如何连接感兴趣。它们必须相同才能使 sympy 正常工作吗?
解决方案
g = g.subs(a, a)
永远不能做任何事情,因为它正在用自己代替事物。
a
用别的东西代替
g.subs(a, sy.symbols('alpha'))
应该使用。SymPy 文档中的相关主题是Assignment does not create a relationship。一个更简单的例子:
a = sy.symbols('a')
b = a + 3 # b is now a+3
a = 5 # b is still a+3 and it will not become 8
在这段代码的末尾,Python 变量a
与名为“a”的 SymPy 符号无关。变量为 5;该符号仍然存在Symbol("a")
并且将永远存在,因为 SymPy 表达式是不可变的。而不是a = 5
一个应该做的事情b.subs(a, 5)
来执行替换。
我对分配的名称 a= 和符号(“a”)中的字符串如何连接感兴趣。
它们根本没有联系。使用 Python 变量a
指向一个名为“a”的符号很方便,这是人们这样做的唯一原因。不幸的是,这种模式会误导他们认为如果他们放a
了 = 一些新的东西,那将会对Symbol("a")
- 它不会产生影响。唯一的影响是 Python 变量现在指向别的东西;包含的表达式Symbol("a")
不受影响。
推荐阅读
- ruby-on-rails - 在 Rails 中使用 Capybara 和 Selenium 测试 Google 地图标记
- php - 邮件()在特定页面上不起作用
- java - 如何使用 apache java poi 在 ms excel 中插入表格
- c# - Visual Studio 2008 中带有方法帖子的休息服务
- javascript - 突出显示 html 表的指定列上的值
- arrays - 如何用单元格数组中的“char”类型替换所有“string”类型?
- bamboo - 如何部署旧版本
- regex - Facebook视频网址上无与伦比的右括号
- c# - 如何获得总 CPU 使用率(所有进程)?(C#)
- react-native - 如何在 React Native 应用程序中设置 DFP