Python Language
Nicht offizielle Python-Implementierungen
Suche…
IronPython
Open Source-Implementierung für .NET und Mono, geschrieben in C #, lizenziert unter Apache License 2.0. Es basiert auf DLR (Dynamic Language Runtime). Es unterstützt nur Version 2.7, Version 3 wird gerade entwickelt.
Unterschiede zu CPython:
- Enge Integration mit .NET Framework.
- Zeichenfolgen sind standardmäßig Unicode.
- Unterstützt keine Erweiterungen für CPython in C.
- Leidet nicht unter Global Interpreter Lock.
- Die Leistung ist normalerweise geringer, hängt jedoch von Tests ab.
Hallo Welt
print "Hello World!"
Sie können auch .NET-Funktionen verwenden:
import clr
from System import Console
Console.WriteLine("Hello World!")
Externe Links
Jython
Open Source-Implementierung für JVM, geschrieben in Java, lizenziert unter Python Software Foundation License. Es unterstützt nur Version 2.7, Version 3 wird gerade entwickelt.
Unterschiede zu CPython:
- Enge Integration mit JVM.
- Zeichenfolgen sind Unicode.
- Unterstützt keine Erweiterungen für CPython in C.
- Leidet nicht unter Global Interpreter Lock.
- Die Leistung ist normalerweise geringer, hängt jedoch von Tests ab.
Hallo Welt
print "Hello World!"
Sie können auch Java-Funktionen verwenden:
from java.lang import System
System.out.println("Hello World!")
Externe Links
Verschlüsseln
Transcrypt ist ein Werkzeug, um eine relativ umfangreiche Python-Teilmenge in kompaktes, lesbares Javascript vorzukompilieren. Es hat die folgenden Eigenschaften:
- Ermöglicht die klassische OO-Programmierung mit mehrfacher Vererbung unter Verwendung der reinen Python-Syntax, die von CPythons nativem Parser analysiert wird
- Nahtlose Integration mit dem Universum von qualitativ hochwertigen, weborientierten JavaScript-Bibliotheken anstelle der desktoporientierten Python-Bibliotheken
- Hierarchisches URL-basiertes Modulsystem, das die Modulverteilung über PyPi ermöglicht
- Einfache Beziehung zwischen Python-Quellcode und generiertem JavaScript-Code zum einfachen Debuggen
- Mehrstufige Quellcaps und optionale Annotation des Zielcodes mit Quellreferenzen
- Kompakte Downloads, kBs statt MBs
- Optimierter JavaScript-Code mit Memoization (Call-Caching), um optional die Prototyp-Lookup-Kette zu umgehen
- Die Überladung des Bedieners kann lokal ein- und ausgeschaltet werden, um die lesbare numerische Mathematik zu erleichtern
Codegröße und Geschwindigkeit
Die Erfahrung hat gezeigt, dass 650 kB Python-Quellcode in etwa die gleiche Menge an JavaScript-Quellcode übersetzt. Die Geschwindigkeit entspricht der Geschwindigkeit von handgeschriebenem JavaScript und kann diese Geschwindigkeit übertreffen, wenn die Anrufaufzeichnung aktiviert ist.
Integration mit HTML
<script src="__javascript__/hello.js"></script>
<h2>Hello demo</h2>
<p>
<div id = "greet">...</div>
<button onclick="hello.solarSystem.greet ()">Click me repeatedly!</button>
<p>
<div id = "explain">...</div>
<button onclick="hello.solarSystem.explain ()">And click me repeatedly too!</button>
Integration mit JavaScript und DOM
from itertools import chain
class SolarSystem:
planets = [list (chain (planet, (index + 1,))) for index, planet in enumerate ((
('Mercury', 'hot', 2240),
('Venus', 'sulphurous', 6052),
('Earth', 'fertile', 6378),
('Mars', 'reddish', 3397),
('Jupiter', 'stormy', 71492),
('Saturn', 'ringed', 60268),
('Uranus', 'cold', 25559),
('Neptune', 'very cold', 24766)
))]
lines = (
'{} is a {} planet',
'The radius of {} is {} km',
'{} is planet nr. {} counting from the sun'
)
def __init__ (self):
self.lineIndex = 0
def greet (self):
self.planet = self.planets [int (Math.random () * len (self.planets))]
document.getElementById ('greet') .innerHTML = 'Hello {}'.format (self.planet [0])
self.explain ()
def explain (self):
document.getElementById ('explain').innerHTML = (
self.lines [self.lineIndex] .format (self.planet [0], self.planet [self.lineIndex + 1])
)
self.lineIndex = (self.lineIndex + 1) % 3
solarSystem = SolarSystem ()
Integration mit anderen JavaScript-Bibliotheken
Transcrypt kann in Kombination mit jeder JavaScript-Bibliothek ohne besondere Maßnahmen oder Syntax verwendet werden. In der Dokumentation finden Sie Beispiele für ao react.js, riot.js, fabric.js und node.js.
Beziehung zwischen Python- und JavaScript-Code
Python
class A:
def __init__ (self, x):
self.x = x
def show (self, label):
print ('A.show', label, self.x)
class B:
def __init__ (self, y):
alert ('In B constructor')
self.y = y
def show (self, label):
print ('B.show', label, self.y)
class C (A, B):
def __init__ (self, x, y):
alert ('In C constructor')
A.__init__ (self, x)
B.__init__ (self, y)
self.show ('constructor')
def show (self, label):
B.show (self, label)
print ('C.show', label, self.x, self.y)
a = A (1001)
a.show ('america')
b = B (2002)
b.show ('russia')
c = C (3003, 4004)
c.show ('netherlands')
show2 = c.show
show2 ('copy')
JavaScript
var A = __class__ ('A', [object], {
get __init__ () {return __get__ (this, function (self, x) {
self.x = x;
});},
get show () {return __get__ (this, function (self, label) {
print ('A.show', label, self.x);
});}
});
var B = __class__ ('B', [object], {
get __init__ () {return __get__ (this, function (self, y) {
alert ('In B constructor');
self.y = y;
});},
get show () {return __get__ (this, function (self, label) {
print ('B.show', label, self.y);
});}
});
var C = __class__ ('C', [A, B], {
get __init__ () {return __get__ (this, function (self, x, y) {
alert ('In C constructor');
A.__init__ (self, x);
B.__init__ (self, y);
self.show ('constructor');
});},
get show () {return __get__ (this, function (self, label) {
B.show (self, label);
print ('C.show', label, self.x, self.y);
});}
});
var a = A (1001);
a.show ('america');
var b = B (2002);
b.show ('russia');
var c = C (3003, 4004);
c.show ('netherlands');
var show2 = c.show;
show2 ('copy');
Externe Links
- Offizielle Website: http://www.transcrypt.org/
- Repository: https://github.com/JdeH/Transcrypt