Python和Javascript中的理解只是非常基础?

RD1*_*RD1 6 javascript python haskell list-comprehension

看看Python和Javascript中的理解,到目前为止,我看不到一些我认为在Haskell等语言中理解最强大的主要特性.

他们允许像多个发电机这样的东西?或者它们只是一个基本的地图过滤器形式?

如果他们不允许多个发电机,我发现它们非常令人失望 - 为什么这些东西被遗漏了?

Dan*_*tin 12

Python允许多个生成器:

>>> [(x,y,x*y) for x in range(1,5) for y in range(1,5)]
[(1, 1, 1), (1, 2, 2), (1, 3, 3), (1, 4, 4), 
 (2, 1, 2), (2, 2, 4), (2, 3, 6), (2, 4, 8), 
 (3, 1, 3), (3, 2, 6), (3, 3, 9), (3, 4, 12),
 (4, 1, 4), (4, 2, 8), (4, 3, 12), (4, 4, 16)]
Run Code Online (Sandbox Code Playgroud)

还有限制:

>>> [(x,y,x*y) for x in range(1,5) for y in range(1,5) if x*y > 8]
[(3, 3, 9), (3, 4, 12), (4, 3, 12), (4, 4, 16)]
Run Code Online (Sandbox Code Playgroud)

更新:Javascript的语法类似(在Firefox上使用javascript shell的结果):

var nums = [1, 2, 3, 21, 22, 30];
var s = eval('[[i,j] for each (i in nums) for each (j in [3,4]) if (i%2 == 0)]');
s.toSource();
[[2, 3], [2, 4], [22, 3], [22, 4], [30, 3], [30, 4]]
Run Code Online (Sandbox Code Playgroud)

(出于某种原因,在javascript shell中评估上下文内容的某些内容需要eval间接使列表推导工作.<script>当然,标记内的Javascript 不需要它)

  • 不,Python不是Haskell.类型检查违反了python的哲学. (2认同)
  • 通过避免使用静态类型语言进行类型检查,您经常会遇到问题,因为编译器假定类型检查在那里并且很有用.在C中你通常会得到指针,然后你用错误的指针和*kablam*做错了.如果你愿意,在Python中检查类型是微不足道的.`assert isinstance(ob,type)` (2认同)