我是programmimg和python的新手。 当我这样做时:
j = 100
k = 200
l = j + k
l
300
现在,如果我改变J的值,我希望'l'的输出不同。为什么输出相同,如何更改。
j = 250
l
300
答案 0 :(得分:6)
当行
l = j + k
是优秀的,Python大致如下:
加载当前绑定到名称j
和k
的对象。在这里,这将是整数100
和200
。
执行添加。这将创建一个值为int
的新300
对象。
将名称l
绑定到生成的对象。
正如您所看到的,l
只是绑定到一个整数,它不再“知道”它来自哪里。
答案 1 :(得分:3)
这不是“动态”的意思。将值赋给变量后,变量将保留该值,直到为其分配不同的值。
动态语言是那些变量可以在运行时采用任何类型的语言,通常甚至可以在其生命周期内保存不同类型的多个值:
a = 1
print a
a = "hello"
print a
那就是说,你可以实现类似于你期望的东西:
>>> j = 100
>>> k = 200
>>> l = lambda: j + k
>>> l()
300
>>> j = 250
>>> l()
450
答案 2 :(得分:3)
在您的代码中,l = j + k
只评估j + k
,这会产生300
的整数值。然后,名称l
绑定到int
值为300
的对象。
添加仅评估一次和一次。如果要执行新的添加,则必须以某种方式显式调用它。
答案 3 :(得分:1)
编程的结构和解释(http://mitpress.mit.edu/sicp/full-text/book/book-ZH-10.html#%_sec_1.1.2)真的有一个很好的部分。
当你使用j = 100或k = 200这样的表达式时,你基本上会给出一个新的名字'价值。这是您正在制作的抽象,以便以后更容易找到这个数字。为变量赋值时,解释器:
因此,在l = j + k的情况下,解释器计算j + k的值,然后给该值赋予名称' l'。我不知道它来自哪里,只是指着我们刚刚计算出的那些值。
您正在寻找的是 lambda 。 Lambda创建了一个过程,每次调用它时都会执行。
所以你可以创建一个过程(函数):
l = lambda j,k:j + k
其中i和j是过程的参数。每次调用该过程时,它会查看您给出的输入(此特定情况下有i和j作为输入),然后执行该过程。另一个潜在的候选人是:
l = lambda:j + k
此过程不接受任何输入,但每次调用它时,它会查找已分配变量j和k的任何值,然后计算它们。
变量与程序与函数的概念对初学程序员来说可能非常混乱;这是一个很好的问题,我希望这个答案很有用:)
-Nathan Lachenmyer
答案 4 :(得分:0)
j = 100
k = 200
l = j + k
我不是指向j + k的未执行函数的指针,因为我认为你期待。
更改j不会改变l指向300的事实。