Python 变量和方程

标签 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 始终保持不变,更新 c 不会改变 fc,即使我相信它应该?

最佳答案

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

关于Python 变量和方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34104435/

相关文章:

python - Django auto_now 和 auto_now_add

python - 将两个 LISTS 值的 SUM 添加到新 LIST

Python处理字节相关对象的内存使用

python - tkinter:输出所有列表后如何使标签消失?

Python pywin32 访问被拒绝

python - 使用 QSUB 和 bash 文件打印 Keras 的训练进度

python - Django 和 Bootstrap : What app is recommended?

python - 同一列中的行元素对出现的次数

python - mysql.connector访问本地网络中的远程数据库Python 3

python - 从 cmd 导入 Cmd,(不适用于 MyPrompt 类)