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!")

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!")

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');


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow