2009-11-23 17 views
16

Entrambe queste lingue mi sembrano estremamente simili. Sebbene Python supporti le classi reali invece di essere basate su prototipi, in Python le classi non sono così diverse dalle funzioni che generano oggetti contenenti valori e funzioni, proprio come faresti in JavaScript. D'altra parte, JavaScript supporta solo numeri e stringhe a virgola mobile come tipi di dati incorporati.Quanto sono diverse le semantiche tra Python e JavaScript?

Queste differenze mi sembrano abbastanza poco profonde, quindi a parte queste cose, quali sono alcune differenze più importanti tra loro?

+4

Molte risposte finora fanno riferimento alle differenze "sintattiche" e generalmente morfologiche piuttosto che alle differenze "SEMANTICHE" come richiesto nella domanda. – mjv

risposta

23
  1. eredità classica in Python, ereditarietà prototipale in ECMAScript
  2. ECMAScript è un linguaggio di bretelle e virgola, mentre Python è bianco-spazio e trattino/blocco basato
  3. No var parole chiave in Python, globali implicite in ECMAScript, entrambi sono con validità lessicale
  4. Chiusure in Python 2.5 e inferiore (re: il commento di Alex Martelli) sono un po ' "limitato", perché le associazioni sono di sola lettura, non è possibile accedere alle variabili private, come si poteva in ECMAScript
  5. Non c'è undefined in Python, le eccezioni sono gettati
  6. lista array immutabili in Python (tuple)
  7. No switch dichiarazione in Python, ma invece siete incoraggiati a utilizzare un dizionario in quel modo, a volte la sua comoda assegnazione di proprietà alle lambda e la loro esecuzione
  8. ECMAScript 3 non ha una yield dichiarazione, né let espressioni/dichiarazioni, né array comprehension s - tuttavia questi sono inclusi in JS di Mozilla che è non standard
  9. raise vs throw, except vs catch (Python, JS)
  10. stringhe nativa Unicode in ECMAScript
  11. operatori parola chiave come and, is e not sono utilizzati in Python
  12. Python non supporta contatori come i++
  13. Python per ciclo è "intelligente", quindi non è necessario utilizzare un contatore per l'enumerazione tramite elenchi, né si eseguono proprietà prototipali ereditate da Object.prototype
  14. Non è necessario usare l'operatore new in Python per creare oggetti
  15. Python è anatra tipizzato

ho rubato un bel po 'di informazioni da http://hg.toolness.com/python-for-js-programmers/raw-file/tip/PythonForJsProgrammers.html

+0

Per # 8, in realtà Mozilla JavaScript supporta _ogni_ una di queste funzionalità. –

+0

Sì, ne sono a conoscenza ma stavo facendo rapidamente delle modifiche e ho deciso di dire "un po 'di incase" ho aggiunto per errore una funzionalità specifica di Python ... aggiornerò. –

+0

4. è obsoleto in Py2.6 (parola chiave 'nonlocal'). –

1

In Python, lo spazio bianco è parte del linguaggio. In Javascript, le parentesi definiscono i blocchi di codice e gli spazi vengono ignorati. Inoltre, Python ha collegamenti per l'API Java, .net e altre librerie fantasiose. Javascript è piuttosto limitato nel reparto librerie rispetto a Python, ma ha alcune ordinate librerie di finestre e così via.

+1

Javascript ha anche collegamenti java e collegamenti .net. Dipende solo da quale interprete stai usando. Puoi anche chiamare direttamente in JAVA e creare app di altalena se stai facendo javascripting in firefox. Non ho nemmeno bisogno di privilegi speciali a meno che tu non voglia fare qualcosa di strano come il file I/O. – Breton

+0

: P Stiamo quasi sempre parlando di "IE6" quando si tratta di JavaScript. –

+0

Davvero? chi è "noi" esattamente? Che cosa strana da dire. In ogni caso, se vuoi farlo in IE6 puoi usare chrome frame, o Jscript.NET + silverlight – Breton

2

Essendo uno sviluppatore JavaScript e fatto un po 'di roba Python (grazie a Google App Engine) direi che i due principali differenze tra JavaScript e Python sarebbe

  • formattazione. JavaScript non si preoccupa dell'aspetto del tuo codice (pensa a tutti i minimizzatori del codice e all'aspetto risultante)

  • Supporto Unicode. JavaScript è completamente unicode, il Python 2.5 di GAE non tanto (avendo Latin 1 come set di caratteri predefinito). Quindi avere la necessità di supportare personaggi non latini può essere una vera PITA se non sei sicuro di quello che stai facendo.

+1

Hai già visto il tipo 'unicode' di Python? –

+0

Certo che ho il problema con unicode di python 2.5 è che devi essere sicuro di quello che stai facendo - devi conoscere le basi. Saltare da un'altra lingua solo per fare una cosa velocemente può finire con un disastro. Per esempio mi ci sono voluti ore con questa linea http://code.google.com/p/turbinecms/source/browse/trunk/main.py#584 per sbarazzarsi del codec "ascii" non codificante carattere% c3 "errori – Andris

4

Digitando: Javascript e Python sono entrambi dinamicamente digitato, mentre javascript è debolmente, python fortemente tipizzato.

4

In python, "self" viene passato esplicitamente a una funzione membro e non è una parola chiave speciale o altro. In javascript, "questo" è applicato dinamicamente. puoi giocare con l'ambito di una funzione membro chiamando apply() su di esso.

2

aggiungerò alcuni non ho visto ancora citato:

  • JavaScript supporta la notazione oggetto-letterale. Python non funziona esattamente nello stesso modo, ma i dizionari Python sono simili agli array associativi di JavaScript.
  • oggetti JavaScript/array supportano questa caratteristica fresco dove non è necessario citare le stringhe (canale singolo) durante la creazione di nuovi oggetti:

    var foo = {bar: "baz"};

  • L'accesso alle chiavi di array associativo in JavaScript può essere effettuato utilizzando la notazione a punti, oltre alla notazione a bretelle. Cioè, questi sono gli stessi:

    foo.bar; // restituisce "baz"

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

  • La sintassi della funzione anonima di Python (lambda) non è flessibile come le funzioni anonime di JavaScript.

  • Python ha, come, una libreria standard e altro. (E sì, so di Rhino et al., Ma le librerie che ti danno non sono standard. Non c'è un modo standardizzato per leggere un file in JavaScript ... che io sappia.)
  • È possibile eseguire JavaScript in un browser. Python ... non così tanto. ;)
Problemi correlati