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



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow