++运算符Python不支持++运算符,没错你再也不需要根据++符号在变量的左右位置来思考到底是先加一再赋值呢还是先赋值再加一。 连续赋值利用元组(tuple),Python可以一次性的给多个变量赋值 (MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7) 函数参数Python的函数参数支持命名参数和可选参数(提供默认值),使用起来很方便,Javascript不支持可选参数和默认值(可以通过对arguments的解析来支持) def info(object, spacing=10, collapse=1): ... ... 其它立即调用函数表达式 (IIFE)Javascript的一个方便的特性是可以立即调用一个刚刚声明的匿名函数。也有人称之为自调用匿名函数。 下面的代码是一个module模式的例子,使用闭包来保存状态实现良好的封装。这样的代码可以用在无需重用的场合。 var counter = (function(){
var i = 0;
return {
get: function(){
return i;
},
set: function( val ){
i = val;
},
increment: function() {
return ++i;
}
};
}());Python没有相应的支持。 生成器和迭代器(Generators & Iterator)在我接触到的Python代码中,大量的使用这样的生成器的模式。 Python生成器的例子 # a generator that yields items instead of returning a list def firstn(n): num = 0 while num < n: yield num num += 1 sum_of_first_n = sum(firstn(1000000)) Javascript1.7中引入了一些列的新特性,其中就包括生成器和迭代器。然而大部分的浏览器除了Mozilla(Mozilla基本上是在自己玩,下一代的Javascript标准应该是ECMAScript5)都不支持这些特性 Javascript1.7 迭代器和生成器的例子。 function fib() {
var i = 0, j = 1;
while (true) {
yield i;
var t = i;
i = j;
j += t;
}
};
var g = fib();
for (var i = 0; i < 10; i++) {
console.log(g.next());
}列表(字典、集合)映射表达式 (List、Dict、Set Comprehension)Python的映射表达式可以非常方便的帮助用户构造列表、字典、集合等内置数据类型。 下面是列表映射表达式使用的例子: >>> [x + 3 for x in range(4)]
[3, 4, 5, 6]
>>> {x + 3 for x in range(4)}
{3, 4, 5, 6}
>>> {x: x + 3 for x in range(4)}
{0: 3, 1: 4, 2: 5, 3: 6}Javascript1.7开始也引入了Array Comprehension var numbers = [1, 2, 3, 4]; var doubled = [i * 2 for (i of numbers)]; Lamda表达式 (Lamda Expression )Lamda表达式是一种匿名函数,基于著名的λ演算。许多语言诸如C#,Java都提供了对lamda的支持。Pyhton就是其中之一。Javascript没有提供原生的Lamda支持。但是有第三方的Lamda包。 g = lambda x : x*3 装饰器(Decorators)Decorator是一种设计模式,大部分语言都可以支持这样的模式,Python提供了原生的对该模式的支持,算是一种对程序员的便利把。 Decorator的用法如下。 @classmethod def foo (arg1, arg2): .... 更多decorator的内容,请参考https://wiki.python.org/moin/PythonDecorators 本人对Javascript和Python的认识有限,欢迎大家提出宝贵意见。 |