2009-11-23 4 views
16

Ces deux langues me semblent extrêmement similaires. Bien que Python prenne en charge les classes réelles au lieu d'être basées sur des prototypes, les classes Python ne sont pas si différentes des fonctions qui génèrent des objets contenant des valeurs et des fonctions, comme vous le feriez en JavaScript. D'un autre côté, JavaScript ne prend en charge que les nombres à virgule flottante et les chaînes en tant que types de données intégrés.Quelle est la différence entre la sémantique entre Python et JavaScript?

Cela me semble être des différences plutôt minces, donc ces choses-là, quelles sont les différences les plus importantes entre elles?

+4

De nombreuses réponses font jusqu'à présent référence à des différences «syntaxiques» et généralement morphologiques plutôt qu'à des différences «SEMANTIC» comme demandé dans la question. – mjv

Répondre

23
  1. héritage classique en Python, l'héritage prototypal dans ECMAScript
  2. ECMAScript est une des accolades et des points-virgules langue tout en Python est blanc-espace et tiret/bloc à base
  3. Aucun mot-clé var en Python, GLOBALS implicites dans ECMAScript, les deux ont une portée lexicale
  4. Fermetures en Python 2.5 et inférieure (re: commentaire Alex Martelli) sont un peu « limitée », car les liaisons sont en lecture seule, vous ne pouvez pas accéder à des variables privées comme vous pourriez en ECMAScript
  5. Il n'y a pas undefined en Python, les exceptions sont jetés
  6. tableaux de liste immuable en Python (tuples)
  7. Aucune déclaration switch en Python mais vous encourageons à utiliser un dictionnaire de cette manière, parfois ses propriétés pratiques attribuant à lambdas et les exécuter
  8. ECMAScript 3 ne dispose pas d'un yield déclaration, ni let expressions/déclarations, ni array comprehension s - mais ceux-ci sont inclus dans La JS Mozilla qui est non standard
  9. raise vs throw, except vs catch (Python, JS)
  10. cordes natif Unicode dans ECMAScript
  11. opérateurs de mots-clés tels que and, is et not sont utilisés en Python
  12. Python ne prend pas en charge les compteurs tels que i++
  13. La boucle for de Python est "intelligente", vous n'avez donc pas besoin d'utiliser un compteur pour énumérer les listes, et vous ne rencontrez pas de propriétés prototypiques héritées de Object.prototype
  14. Vous ne devez pas utiliser l'opérateur new en Python pour créer des objets
  15. Python est typé canard-

J'ai gagné une bonne partie de l'info de http://hg.toolness.com/python-for-js-programmers/raw-file/tip/PythonForJsProgrammers.html

+0

Pour # 8, Mozilla JavaScript prend en charge _every_ une de ces fonctionnalités. –

+0

Ouais je suis au courant de ça mais je faisais rapidement des modifications et j'ai juste décidé de dire "au cas où" j'ai accidentellement ajouté une fonctionnalité spécifique à Python ... Je vais mettre à jour. –

+0

4. est obsolète dans Py2.6 (mot-clé 'nonlocal'). –

1

En Python, les espaces font partie du langage. En Javascript, les accolades définissent des blocs de code et les espaces sont ignorés. En outre, Python possède des liaisons pour l'API Java, .net et d'autres bibliothèques fantaisie. Javascript est assez limité dans le département de la bibliothèque par rapport à Python, mais il a quelques bibliothèques de fenêtrage soignées et autres.

+1

Javascript a des liaisons java et des liaisons .net aussi. Cela dépend de quel interprète vous utilisez. Vous pouvez même appeler directement dans JAVA et faire des applications swing si vous javascript dans Firefox. N'a même pas besoin de privilèges spéciaux à moins que vous ne vouliez faire quelque chose de bizarre comme le fichier i/o. – Breton

+0

: P Nous parlons presque toujours de "IE6" quand JavaScript est concerné. –

+0

Vraiment? Qui est "nous" exactement? Quel chose étrange à dire. En tout cas, si vous voulez le faire dans IE6, vous pouvez utiliser le cadre chromé, ou Jscript.NET + Silverlight – Breton

2

Être un développeur JavaScript et fait des trucs Python (grâce à Google App Engine) Je dirais que les deux principales différences entre JavaScript et Python serait

  • Mise en forme. JavaScript ne se soucie pas de l'apparence de votre code (pensez à tous les minimiseurs de code et à quoi ressemble le résultat)

  • Support Unicode. JavaScript est tout le chemin unicode, Python 2.5 de GAE pas tellement (ayant Latin 1 comme jeu de caractères par défaut). Donc, avoir le besoin de supporter des personnages non-latins peut être un vrai PITA si vous n'êtes pas sûr de ce que vous faites.

+1

Avez-vous déjà vu le type 'unicode' de Python? –

+0

Bien sûr, mais la chose avec python 2.5 unicode est que vous devez être sûr de ce que vous faites - vous devez connaître les bases. Sauter d'une autre langue juste pour faire une chose rapidement peut se terminer par un désastre. Par exemple, il m'a fallu des heures avec cette ligne http://code.google.com/p/turbinecms/source/browse/trunk/main.py#584 pour se débarrasser du codec "ascii" ne peut pas coder caractères% c3 "erreurs – Andris

4

Taper: Javascript et Python sont tous deux dynamiquement tapé, tandis que javascript est faiblement, python fortement tapé.

4

En python, "self" est explicitement passé à une fonction membre, et n'est pas un mot-clé spécial ou quoi que ce soit. En javascript, "ceci" est de portée dynamique. vous pouvez jouer avec la portée d'une fonction membre en appelant apply() dessus.

2

Je vais ajouter quelques je ne l'ai pas vu encore mentionné:

  • JavaScript prend en charge la notation littérale objet. Python ne fonctionne pas exactement de la même manière, mais les dictionnaires Python sont similaires aux tableaux associatifs JavaScript.
  • objets/tableaux JavaScript supportent cette fonctionnalité fraîche où vous n'avez pas besoin de citer des chaînes (de mot simple) lors de la création de nouveaux objets:

    var foo = {bar: "baz"};

  • L'accès aux clés de tableau associatif en JavaScript peut être effectué à l'aide de la notation par points, en plus de la notation de l'accolade. C'est-à-dire, ce sont les mêmes:

    toto.bar; // retourne "baz"

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

  • La syntaxe de la fonction anonyme de Python (lambda) n'est pas aussi flexible que les fonctions anonymes de JavaScript.

  • Python a, comme, une bibliothèque standard et d'autres choses. (Et oui, je sais à propos de Rhino et al., Mais les bibliothèques qu'ils vous donnent ne sont pas standard. Il n'y a pas de façon standardisée de lire un fichier en JavaScript ... que je connais.)
  • Vous pouvez exécuter JavaScript dans un navigateur Python ... pas tellement.
Questions connexes