首页 > Python基础教程 >
-
Python 与 Javascript 比较(3)
要非常小心的使用typeof,从上面的例子你可以看到,typeof null居然是object。因为javscript的弱类型特性,想要获得更实际的类型,还需要结合使用instanceof,constructor等概念。具体请参考这篇文章
Python提供内置方法type来获得数据的类型。
1
2
3
4
5
6
7
8
|
>>> type ([]) is list True >>> type ({}) is dict True >>> type ('') is str True >>> type ( 0 ) is int True |
同时也可以通过isinstance()来判断类的类型
1
2
3
4
5
6
7
8
|
class A: pass class B(A): pass isinstance (A(), A) # returns True type (A()) = = A # returns True isinstance (B(), A) # returns True type (B()) = = A # returns False |
但是注意Python的class style发生过一次变化,不是每个版本的Python运行上述代码的行为都一样,在old style中,所有的实例的type都是‘instance’,所以用type方法来检查也不是一个好的方法。这一点和Javascript很类似。
自动类型转换
当操作不同类型一起进行运算的时候,Javascript总是尽可能的进行自动的类型转换,这很方便,当然也很容易出错。尤其是在进行数值和字符串操作的时候,一不小心就会出错。我以前经常会计算SVG中的各种数值属性,诸如x,y坐标之类的,当你一不小心把一个字符串加到数值上的时候,Javascript会自动转换出一个数值,往往是NaN,这样SVG就完全画不出来啦,因为自动转化是合法的,找到出错的地方也非常困难。
Python在这一点上就非常的谨慎,一般不会在不同的类型之间做自动的转换。
语法
风格
Python使用缩进来决定逻辑行的结束非常具有创造性,这也许是Python最独特的属性了,当然也有人对此颇具微词,尤其是需要修改重构代码的时候,修改缩进往往会引起不小的麻烦。
Javascript虽然名字里有Java,它的风格也有那么一点像Java,可是它和Java就好比雷峰塔和雷锋一样,真的没有半毛钱的关系。到时语法上和C比较类似。这里必须要提到的是coffeescript作为构建与Javascript之上的一种语言,采用了类似Python的语法风格,也是用缩进来决定逻辑行。
Python风格
1
2
3
4
5
6
7
8
9
|
def func( list ): for i in range ( 0 , len ( list )): print list [i] Javascript风格 function funcs( list ) { for (var i = 0 , len = list .length(); i < len ; i + + ) { console.log( list [i]); } } |