python的动态本质

时间:2012-02-22 22:59:24

标签: python

我是programmimg和python的新手。 当我这样做时:

 j = 100
 k = 200
 l = j + k
 l
 300

现在,如果我改变J的值,我希望'l'的输出不同。为什么输出相同,如何更改。

 j = 250
 l
 300

5 个答案:

答案 0 :(得分:6)

当行

l = j + k

是优秀的,Python大致如下:

  1. 加载当前绑定到名称jk的对象。在这里,这将是整数100200

  2. 执行添加。这将创建一个值为int的新300对象。

  3. 将名称l绑定到生成的对象。

  4. 正如您所看到的,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这样的表达式时,你基本上会给出一个新的名字'价值。这是您正在制作的抽象,以便以后更容易找到这个数字。为变量赋值时,解释器:

  1. 弄清楚(递归地)表达式右侧的内容
  2. 将其解析为值(或字符串或int等)
  3. 赋予该值以“' name'你正在分配它。
  4. 因此,在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是指向存储器保持100的指针
  • k是指向存储器保持200
  • 的指针
  • l是指向存储器保持300的指针

我不是指向j + k的未执行函数的指针,因为我认为你期待。

更改j不会改变l指向300的事实。