Python 和 JavaScript 之间的语义有何不同?
Posted
技术标签:
【中文标题】Python 和 JavaScript 之间的语义有何不同?【英文标题】:How different are the semantics between Python and JavaScript? 【发布时间】:2010-12-19 16:21:10 【问题描述】:这两种语言对我来说都非常相似。尽管 Python 支持实际类而不是基于原型,但在 Python 中,类与生成包含值和函数的对象的函数并没有什么不同,就像在 javascript 中所做的那样。另一方面,JavaScript 只支持浮点数和字符串作为内置数据类型。
这些对我来说似乎是相当肤浅的差异,那么抛开这些东西,它们之间还有哪些更重要的差异?
【问题讨论】:
到目前为止,许多回复都提到了syntactic
和一般的形态差异,而不是问题中提出的SEMANTIC
差异。
【参考方案1】:
-
Python 中的经典继承,ECMAScript 中的原型继承
ECMAScript 是一种大括号和分号语言,而 Python 是基于空格和缩进/块的语言
Python 中没有
var
关键字,ECMAScript 中的隐式全局变量,两者都是词法作用域
Python 2.5 及更低版本中的闭包(回复:Alex Martelli 的评论)有些“受限”,因为绑定是只读的,您无法像在 ECMAScript 中那样访问私有变量
Python 中没有undefined
,会抛出异常
Python 中的不可变列表数组(元组)
在 Python 中没有 switch
语句,而是鼓励您以这种方式使用字典,有时它可以方便地将属性分配给 lambda 并执行它们
ECMAScript 3 没有 yield
语句,也没有 let
表达式/语句,也没有 array comprehension
s - 但是这些都包含在 Mozilla 的非标准 JS 中
raise
vs throw
, except
vs catch
(Python, JS)
ECMAScript 中的原生 Unicode 字符串
在 Python 中使用了 and
、is
和 not
等关键字运算符
Python 不支持i++
等计数器
Python 的 for 循环非常“智能”,因此您无需使用计数器来枚举列表,也不会遇到继承自 Object.prototype
的原型属性
您不必在 Python 中使用 new
运算符来创建对象
Python 是鸭式的
我从http://hg.toolness.com/python-for-js-programmers/raw-file/tip/PythonForJsProgrammers.html偷了很多信息
【讨论】:
对于#8,实际上 Mozilla JavaScript 支持每一个这些特性。 是的,我知道这一点,但我正在快速进行编辑,只是决定说some
,以防我不小心添加了一个 Python 特定的功能......我会更新。
4.在 Py2.6 中已过时(nonlocal
关键字)。
Python 具有原生 unicode 字符串和递增(只是拼写为“+= 1”而不是“++”)。你也可以在 JS 中使用鸭子类型。
我补充了一点:在 Python 中,您可以通过 *args
和 **kwargs
访问函数的参数列表。然而,JavaScript 有一个变量 arguments
可以访问,即使它不必在函数的参数列表中明确说明。【参考方案2】:
键入:Javascript 和 Python 都是 动态 类型,而 javascript 是 weakly,python strongly 类型。
【讨论】:
【参考方案3】:在 python 中,“self”被显式传递给成员函数,而不是特殊关键字或任何东西。 在 javascript 中,“this”是动态范围的。你可以通过调用 apply() 来调整成员函数的范围。
【讨论】:
【参考方案4】:我会添加一些我还没有提到的:
JavaScript 支持对象文字表示法。 Python 的工作方式并不完全相同,但 Python 字典类似于 JavaScript 关联数组。JavaScript 对象/数组支持在创建新对象时无需引用(单字)字符串的酷炫功能:
var foo = bar: "baz" ;
除了大括号符号之外,还可以使用点符号来访问 JavaScript 中的关联数组键。也就是说,它们是相同的:
foo.bar; //返回“baz”
foo["bar"]; // 返回“baz”
Python 的匿名函数 (lambda
) 语法不如 JavaScript 的匿名函数灵活。
【讨论】:
【参考方案5】:作为一名 JavaScript 开发人员并做了一些 Python 工作(感谢 Google App Engine)我想说 JavaScript 和 Python 之间的两个主要区别是
格式化。 JavaScript 不关心代码的外观(想想所有代码最小化器以及生成的外观)
Unicode 支持。 JavaScript 一直是 unicode,GAE 的 Python 2.5 没有那么多(将拉丁语 1 作为默认字符集)。因此,如果您不确定自己在做什么,那么需要支持非拉丁字符可能是一个真正的 PITA。
【讨论】:
当然我有,但是 python 2.5 unicode 的问题是你需要确定你在做什么——你需要了解基础知识。从另一种语言跳出来只是为了快速做一件事可能会以灾难告终。例如,这行 code.google.com/p/turbinecms/source/browse/trunk/main.py#584 花了我几个小时来摆脱“'ascii'编解码器无法编码字符 %c3”错误【参考方案6】:在 Python 中,空格是语言的一部分。在 Javascript 中,大括号定义代码块并且忽略空格。此外,Python 还绑定了 Java API、.net 和其他酷炫的库。与 Python 相比,Javascript 在库部门的应用相当有限,但它有一些简洁的窗口库等。
【讨论】:
Javascript 也有 java 绑定和 .net 绑定。仅取决于您使用的解释器。如果您在 Firefox 中使用 javascript,您甚至可以直接调用 JAVA 并制作 Swing 应用程序。甚至不需要任何特殊权限,除非你想做一些奇怪的事情,比如文件 i/o。 :P 当涉及到 JavaScript 时,我们几乎总是在谈论“IE6”。 真的吗? “我们”到底是谁?说什么奇怪的话。无论如何,如果你想在 IE6 中做,你可以使用 chrome frame,或者 Jscript.NET + silverlight 我们和大多数 JavaScript 用户一样,必须支持截然不同的用户群,而一些用户处于无法使用 chrome frame 和 silverlight 的锁定系统。任何有业务问题的人几乎总是为最大的公分母而写,而使用 JavaScript,这个数字很低。这样的 GCD 通常不会发生在 Python 中。以上是关于Python 和 JavaScript 之间的语义有何不同?的主要内容,如果未能解决你的问题,请参考以下文章