2009-11-23 16 views
16

Ambos idiomas me parecen extremadamente similares. Aunque Python admite clases reales en lugar de estar basadas en prototipos, en Python las clases no son tan diferentes de las funciones que generan objetos que contienen valores y funciones, tal como lo haría en JavaScript. Por otro lado, JavaScript solo admite números de coma flotante y cadenas como tipos de datos incorporados.¿Cuán diferente es la semántica entre Python y JavaScript?

Me parecen diferencias bastante superficiales, así que aparte de estas, ¿cuáles son algunas de las diferencias más importantes entre ellas?

+4

Muchas respuestas hacen referencia a las diferencias "sintácticas" y generalmente morfológicas más que a las diferencias "SEMÁNTICAS" tal como se plantean en la pregunta. – mjv

Respuesta

23
  1. herencia clásica en Python, herencia de prototipos en ECMAScript
  2. ECMAScript es un lenguaje de llaves y punto y coma, mientras que Python es un espacio en blanco y guión/bloque a base
  3. Sin var de palabras clave en Python, las variables globales implícitos en ECMAScript, ambos tienen un alcance léxico
  4. Cierres en Python 2.5 e inferior (re: el comentario de Alex Martelli) son algo "limitada" porque los enlaces son de sólo lectura, no se puede acceder a las variables privadas como se pueda en ECMAScript
  5. No hay undefined en Python, se lanzan excepciones
  6. matrices lista inmutable en Python (tuplas)
  7. sin switch declaración en Python pero en cambio le anima a usar un diccionario de esa manera, a veces es conveniente asignación de propiedades a lambdas y ejecutarlas
  8. ECMAScript 3 no tiene un yield declaración, ni let expresiones/declaraciones, ni array comprehension s - sin embargo, estos se incluyen en JS de Mozilla, que no es estándar
  9. raise vs throw, except vs catch (Python, JS)
  10. cadenas nativo Unicode en ECMAScript
  11. operadores de palabras clave tales como and, is, y not se utilizan en Python
  12. Python no admite contadores como i++
  13. Python's for loop es "inteligente", por lo que no necesita usar un contador para enumerar a través de listas, ni tampoco se encuentra con las propiedades de prototipado heredadas de Object.prototype
  14. Usted no tiene que utilizar el operador new en Python para crear objetos
  15. Python es pato-mecanografiado

robé una buena cantidad de información de http://hg.toolness.com/python-for-js-programmers/raw-file/tip/PythonForJsProgrammers.html

+0

Para el n. ° 8, en realidad Mozilla JavaScript admite _ todas_sus características. –

+0

Sí, soy consciente de eso, pero estaba haciendo ediciones rápidamente y simplemente decidí decir 'algo' en caso de que añadiera accidentalmente una función específica de Python ... Lo actualizaré. –

+0

4. está obsoleto en Py2.6 (palabra clave 'nonlocal'). –

1

En Python, el espacio en blanco es parte del idioma. En Javascript, las llaves definen bloques de códigos y los espacios se ignoran. Además, Python tiene enlaces para la API de Java, .net y otras geniales bibliotecas de lujo. Javascript es bastante limitado en el departamento de la biblioteca en comparación con Python, pero tiene algunas bibliotecas ordenadas de ventanas y cosas así.

+1

Javascript tiene enlaces Java y enlaces .net también. Solo depende de qué intérprete estés usando. Incluso puede llamar directamente a JAVA y crear aplicaciones swing si está realizando javascripting en Firefox. Ni siquiera necesitas privilegios especiales a menos que quieras hacer algo extraño como archivo E/S. – Breton

+0

: P Casi siempre estamos hablando de "IE6" cuando se trata de JavaScript. –

+0

¿De verdad? quien es "nosotros" exactamente? Qué cosa más extraña de decir. En cualquier caso, si quieres hacerlo en IE6 puedes usar chrome frame, o Jscript.NET + silverlight – Breton

2

Ser un desarrollador de JavaScript y hecho algunas cosas Python (gracias a Google App Engine) Me gustaría decir que los dos grandes diferencias entre JavaScript y Python serían

  • formato. JavaScript no se preocupa por el aspecto de su código (piense en todos los minimizadores de código y en cómo se ve el resultado)

  • Compatibilidad con Unicode. JavaScript es todo unicode, el Python 2.5 de GAE no tanto (teniendo Latin 1 como el juego de caracteres predeterminado). Por lo tanto, tener la necesidad de admitir caracteres no latinos puede ser un verdadero PITA si no estás seguro de lo que estás haciendo.

+1

¿Ya has visto el tipo 'Unicode' de Python? –

+0

Claro que lo tengo, pero con el unicode de python 2.5 es que necesita estar seguro de lo que está haciendo, necesita saber lo básico. Saltar desde otro idioma solo para hacer una cosa rápidamente puede terminar con un desastre. Por ejemplo, me tomó horas con esta línea http://code.google.com/p/turbinecms/source/browse/trunk/main.py#584 para deshacerse del "códec 'ascii' que no puede codificar caracteres% c3 "errors – Andris

4

Typing: Javascript y Python son ambos dinámicamente mecanografiados, mientras que javascript es débilmente, python fuertemente mecanografiados.

4

en Python, "auto" se pasa explícitamente a una función miembro, y no es una palabra clave especial o cualquier cosa. En javascript, "esto" tiene un alcance dinámico. puede jugar con el alcance de una función de miembro llamando a apply() en él.

2

voy a añadir unas pocas que no he visto todavía mencionado:

  • JavaScript soporta la notación literal de objetos. Python no funciona exactamente de la misma manera, pero los diccionarios de Python son similares a las matrices asociativas de JavaScript.
  • objetos JavaScript/matrices apoyan esa característica fresco en el que no es necesario citar las cadenas (de una sola palabra) al crear nuevos objetos:

    var foo = {barras: "Baz"};

  • Acceso a las llaves de matriz asociativa en JavaScript se pueden hacer usando la notación de puntos, además de prepararse notación. Es decir, estos son los mismos:

    foo.bar; // devuelve "baz"

    foo ["bar"]; // devuelve "baz"

  • La sintaxis de la función anónima de Python (lambda) no es tan flexible como las funciones anónimas de JavaScript.

  • Python tiene, como, una biblioteca estándar y esas cosas. (Y sí, sé sobre Rhino et al., Pero las bibliotecas que le dan no son estándar. No hay una forma estandarizada de leer un archivo en JavaScript ... que yo sepa).
  • Puede ejecutar JavaScript en un navegador. Python ... no tanto. ;)
Cuestiones relacionadas