zoukankan      html  css  js  c++  java
  • python与lua闭包的一点不同

    python与lua都支持闭包(closure),但是两者的实现有所不同,导致运行结果也不同,使用时要注意区分。

    例子

    python版

     1 def T():
     2     r = []
     3     for i in xrange(10):
     4         def f():
     5             return i
     6         r.append(f)
     7     return r
     8 
     9 t = T()
    10 for i in xrange(10):
    11     print t[i], t[i]()

    相应的执行结果为

    这其实与我们预期的结果是不一样的,我们更期望它输出1,2,3...10,这样比较符合常理。这里,i仅仅只是在closure中的一个引用而已,指向的依然是同一个对象。当这个对象被改变,所有的t执行的时候获得的值都是修改后的值。

    与之类似的lua版

     1 function T()
     2     r = {}
     3     for i = 1, 10 do
     4         function f()
     5             return i
     6         end
     7         table.insert(r, f)
     8     end
     9     return r
    10 end
    11 
    12 t = T()
    13 for i = 1, 10 do
    14     print(t[i], t[i]())
    15 end

    执行结果为

    这里和通常的预期一致。因此,lua对函数式编程的支持要比Python好一些,python强大在OO方面,不建议以FP的方式来使用它,否则可以用OCamlF#Haskell等来完成。

  • 相关阅读:
    Dungeon Game 解答
    Gray Code 解答
    N-Queens II 解答
    N-Queens 解答
    Permutation Sequence 解答
    Generate Parentheses 解答
    Letter Combinations of a Phone Number 解答
    Permutations 解答
    Combination Sum II 解答
    134. Gas Station
  • 原文地址:https://www.cnblogs.com/njucslzh/p/2716490.html
Copyright © 2011-2022 走看看