Python Language
Niet-officiële Python-implementaties
Zoeken…
IronPython
Open-source implementatie voor .NET en Mono geschreven in C #, gelicentieerd onder Apache License 2.0. Het vertrouwt op DLR (Dynamic Language Runtime). Het ondersteunt alleen versie 2.7, versie 3 wordt momenteel ontwikkeld.
Verschillen met CPython:
- Nauwe integratie met .NET Framework.
- Strings zijn standaard Unicode.
- Ondersteunt geen extensies voor CPython geschreven in C.
- Heeft geen last van Global Interpreter Lock.
- De prestaties zijn meestal lager, hoewel dit afhankelijk is van tests.
Hallo Wereld
print "Hello World!"
U kunt ook .NET-functies gebruiken:
import clr
from System import Console
Console.WriteLine("Hello World!")
Externe links
Jython
Open-source implementatie voor JVM geschreven in Java, gelicentieerd onder Python Software Foundation License. Het ondersteunt alleen versie 2.7, versie 3 wordt momenteel ontwikkeld.
Verschillen met CPython:
- Nauwe integratie met JVM.
- Strings zijn Unicode.
- Ondersteunt geen extensies voor CPython geschreven in C.
- Heeft geen last van Global Interpreter Lock.
- De prestaties zijn meestal lager, hoewel dit afhankelijk is van tests.
Hallo Wereld
print "Hello World!"
U kunt ook Java-functies gebruiken:
from java.lang import System
System.out.println("Hello World!")
Externe links
Transcrypt
Transcrypt is een hulpmiddel om een vrij uitgebreide subset van Python voor te compileren in compacte, leesbare Javascript. Het heeft de volgende kenmerken:
- Maakt klassieke OO-programmering mogelijk met meerdere overervingen met behulp van pure Python-syntaxis, ontleed door de native parser van CPython
- Naadloze integratie met het universum van webgeoriënteerde JavaScript-bibliotheken van hoge kwaliteit, in plaats van de desktopgeoriënteerde Python-bibliotheken
- Hiërarchisch op URL gebaseerd modulesysteem dat moduleverdeling via PyPi mogelijk maakt
- Eenvoudige relatie tussen Python-bron en gegenereerde JavaScript-code voor eenvoudig debuggen
- Multi-level sourcemaps en optionele annotatie van doelcode met bronreferenties
- Compacte downloads, kB's in plaats van MB's
- Geoptimaliseerde JavaScript-code, met behulp van memoisatie (caching van oproepen) om de prototype-opzoekketen optioneel te omzeilen
- Overbelasting van de operator kan lokaal worden in- en uitgeschakeld om leesbare numerieke wiskunde te vergemakkelijken
Codegrootte en snelheid
De ervaring heeft geleerd dat 650 kB Python-broncode ongeveer overeenkomt met dezelfde hoeveelheid JavaScript-broncode. De snelheid komt overeen met de snelheid van handgeschreven JavaScript en kan deze overtreffen als gespreksnotitie is ingeschakeld.
Integratie met 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>
Integratie met JavaScript en 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 ()
Integratie met andere JavaScript-bibliotheken
Transcrypt kan worden gebruikt in combinatie met elke JavaScript-bibliotheek zonder speciale maatregelen of syntaxis. In de documentatie worden voorbeelden gegeven voor oa react.js, riot.js, fabric.js en node.js.
Relatie tussen Python en 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
- Officiële website: http://www.transcrypt.org/
- Repository: https://github.com/JdeH/Transcrypt