Python变量和方程

时间:2015-12-05 11:40:43

标签: python python-3.x

所以我对Python和编码一般来说都很陌生,但是当我遇到一些二分法时,我遇到了一个问题。我有这段代码:

a = 1
b = 2
c = 0

fa = a**3-a-2
fb = b**3-b-2
fc = c**3-c-2

c += 2
print(fc)

问题在于,当我运行它时,' c'可变的变化,但' fc'保持不变并输出-2,而应输出4。无论我尝试过什么,fc alwas都保持不变,更新c不会改变fc,即使我相信它应该?

1 个答案:

答案 0 :(得分:1)

Python在fafbfc中存储表达式的结果,而不是表达式本身:

>>> a = 1
>>> b = 2
>>> c = 0
>>> fa = a**3-a-2
>>> fb = b**3-b-2
>>> fc = c**3-c-2
>>> fa
-2
>>> fb
4
>>> fc
-2
>>> type(fc)
<class 'int'>

如果要重新运行表达式以更改变量,请创建函数。对于单个表达式,您可以使用lambda expression

创建函数对象
fa = lambda: a**3-a-2
fb = lambda: b**3-b-2
fc = lambda: c**3-c-2

这3个函数希望abc存在于其父作用域中。现在更改c然后调用该函数将重新运行表达式:

c += 2
print(fc())  # note the (), calling the function

演示:

>>> fa = lambda: a**3-a-2
>>> fb = lambda: b**3-b-2
>>> fc = lambda: c**3-c-2
>>> fa
<function <lambda> at 0x10979dd90>
>>> fb
<function <lambda> at 0x1097b1e18>
>>> fc
<function <lambda> at 0x1097b1ea0>
>>> fc()  # calling a function executes the expression, each time
-2
>>> c += 2
>>> fc()
4