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 comprehensions - 但是这些都包含在 Mozilla 的非标准 JS 中 raise vs throw, except vs catch (Python, JS) ECMAScript 中的原生 Unicode 字符串 在 Python 中使用了 andisnot 等关键字运算符 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 的匿名函数灵活。

Python 有一个标准库之类的东西。 (是的,我知道 Rhino 等人,但他们给你的库不是标准。在 JavaScript 中读取文件没有标准化的方法......据我所知。)李> 您可以在浏览器中运行 JavaScript。 Python...不是那么多。 ;)

【讨论】:

【参考方案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 之间的语义有何不同?的主要内容,如果未能解决你的问题,请参考以下文章

Javascript大括号和中括号的区别

ERANGE 和 EOVERFLOW 之间的语义区别是啥?

属性和字段之间的语义差异及其含义

javascript小括号中括号大括号学习总结

查找不同单词之间的语义相似性和关系

“查找”和“搜索”之间的语义区别?