Python Language
Icke-officiella Python-implementationer
Sök…
Ironpython
Open-source-implementering för .NET och Mono skrivna i C #, licensierade under Apache License 2.0. Det förlitar sig på DLR (Dynamic Language Runtime). Den stöder endast version 2.7, version 3 utvecklas för närvarande.
Skillnader med CPython:
- Tät integration med .NET Framework.
- Strängar är Unicode som standard.
- Stöder inte tillägg för CPython skrivna i C.
- Lider inte av det globala tolklåset.
- Prestanda är vanligtvis lägre, även om det beror på tester.
Hej världen
print "Hello World!"
Du kan också använda .NET-funktioner:
import clr
from System import Console
Console.WriteLine("Hello World!")
externa länkar
Jython
Open source-implementering för JVM skriven i Java, licensierad under Python Software Foundation License. Den stöder endast version 2.7, version 3 utvecklas för närvarande.
Skillnader med CPython:
- Tät integration med JVM.
- Strängar är Unicode.
- Stöder inte tillägg för CPython skrivna i C.
- Lider inte av det globala tolklåset.
- Prestanda är vanligtvis lägre, även om det beror på tester.
Hej världen
print "Hello World!"
Du kan också använda Java-funktioner:
from java.lang import System
System.out.println("Hello World!")
externa länkar
Transcrypt
Transcrypt är ett verktyg för att förkomponera en ganska omfattande delmängd av Python till kompakt, läsbart Javascript. Det har följande egenskaper:
- Tillåter klassisk OO-programmering med flera arv med ren Python-syntax, analyserad av CPythons ursprungliga parser
- Sömlös integration med universumet av högkvalitativa webborienterade JavaScript-bibliotek snarare än de skrivbordsorienterade Python-biblioteken
- Hierarkiskt URL-baserat modulsystem som tillåter moduldistribution via PyPi
- Enkel relation mellan Python-källa och genererad JavaScript-kod för enkel felsökning
- Multi-level sourcemaps och valfri kommentering av målkod med källreferenser
- Kompakta nedladdningar, kB: er snarare än MB
- Optimerad JavaScript-kod, med memoization (samtalcache) för att valfritt kringgå prototypuppsökningskedjan
- Operatörens överbelastning kan slås på och stängas lokalt för att underlätta läsbar numerisk matematik
Kodstorlek och hastighet
Erfarenheten har visat att 650 kB Python-sourcode ungefär översätter i samma mängd JavaScript-källkod. Hastigheten matchar hastigheten på handskriven JavaScript och kan överträffa den om samtal memoizing är på.
Integration med 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 med JavaScript och 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 med andra JavaScript-bibliotek
Transcrypt kan användas i kombination med alla JavaScript-bibliotek utan speciella åtgärder eller syntax. I dokumentationen ges exempel på ao react.js, riot.js, fabric.js och node.js.
Förhållandet mellan Python och JavaScript-kod
Pytonorm
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');
externa länkar
- Officiell webbplats: http://www.transcrypt.org/
- Förvaret: https://github.com/JdeH/Transcrypt