所以我对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,即使我相信它应该?
答案 0 :(得分:1)
Python在fa
,fb
和fc
中存储表达式的结果,而不是表达式本身:
>>> 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个函数希望a
,b
和c
存在于其父作用域中。现在更改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