Python Language
Nieoficjalne implementacje Pythona
Szukaj…
IronPython
Implementacja Open Source dla .NET i Mono napisana w C #, na licencji Apache License 2.0. Opiera się na DLR (Dynamic Language Runtime). Obsługuje tylko wersję 2.7, wersja 3 jest obecnie opracowywana.
Różnice z CPython:
- Ścisła integracja z .NET Framework.
- Ciągi są domyślnie Unicode.
- Nie obsługuje rozszerzeń CPython napisanych w C.
- Nie cierpi na globalną blokadę tłumacza.
- Wydajność jest zwykle niższa, choć zależy to od testów.
Witaj świecie
print "Hello World!"
Możesz także korzystać z funkcji .NET:
import clr
from System import Console
Console.WriteLine("Hello World!")
Linki zewnętrzne
Jython
Implementacja open source dla JVM napisana w Javie, licencjonowana na licencji Python Software Foundation. Obsługuje tylko wersję 2.7, wersja 3 jest obecnie opracowywana.
Różnice z CPython:
- Ścisła integracja z JVM.
- Ciągi są Unicode.
- Nie obsługuje rozszerzeń CPython napisanych w C.
- Nie cierpi na globalną blokadę tłumacza.
- Wydajność jest zwykle niższa, choć zależy to od testów.
Witaj świecie
print "Hello World!"
Możesz także użyć funkcji Java:
from java.lang import System
System.out.println("Hello World!")
Linki zewnętrzne
Transkrypt
Transcrypt to narzędzie do wstępnej kompilacji dość obszernego podzbioru Pythona w kompaktowy, czytelny Javascript. Ma następujące cechy:
- Umożliwia klasyczne programowanie OO z wielokrotnym dziedziczeniem przy użyciu czystej składni Pythona, analizowane przez natywny parser CPython
- Bezproblemowa integracja ze światem wysokiej jakości bibliotek JavaScript zorientowanych na strony internetowe, a nie z Pythona
- Hierarchiczny system modułów oparty na adresach URL umożliwiający dystrybucję modułów za pośrednictwem PyPi
- Prosta relacja między źródłem Pythona a wygenerowanym kodem JavaScript w celu łatwego debugowania
- Wielopoziomowe mapy zasobów i opcjonalna adnotacja kodu docelowego z odniesieniami do źródła
- Kompaktowe pliki do pobrania, KB, a nie MB
- Zoptymalizowany kod JavaScript, wykorzystujący zapamiętywanie (buforowanie połączeń) w celu opcjonalnego pominięcia łańcucha wyszukiwania prototypów
- Przeciążenie operatora można włączać i wyłączać lokalnie, aby ułatwić odczyt matematyki numerycznej
Rozmiar i prędkość kodu
Doświadczenie pokazuje, że 650 kB kodu źródłowego Pythona z grubsza tłumaczy taką samą ilość kodu źródłowego JavaScript. Prędkość odpowiada prędkości odręcznego kodu JavaScript i może ją przekroczyć, jeśli włączona jest funkcja zapamiętywania połączeń.
Integracja z 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>
Integracja z JavaScript i 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 ()
Integracja z innymi bibliotekami JavaScript
Transcrypt może być używany w połączeniu z dowolną biblioteką JavaScript bez specjalnych środków lub składni. W dokumentacji podano przykłady dla ao reag.js, riot.js, fabric.js i node.js.
Relacja między Pythonem a kodem JavaScript
Pyton
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');
Linki zewnętrzne
- Oficjalna strona internetowa: http://www.transcrypt.org/
- Repozytorium: https://github.com/JdeH/Transcrypt