Python Language
Implementaciones no oficiales de Python
Buscar..
IronPython
Implementación de código abierto para .NET y Mono escrito en C #, con licencia de Apache License 2.0. Se basa en DLR (Dynamic Language Runtime). Sólo es compatible con la versión 2.7, la versión 3 se está desarrollando actualmente.
Diferencias con CPython:
- Integración estrecha con .NET Framework.
- Las cadenas son Unicode por defecto.
- No admite extensiones para CPython escritas en C.
- No sufre de Global Intérprete Lock.
- El rendimiento suele ser menor, aunque depende de las pruebas.
Hola Mundo
print "Hello World!"
También puedes usar las funciones .NET:
import clr
from System import Console
Console.WriteLine("Hello World!")
enlaces externos
Jython
Implementación de código abierto para JVM escrita en Java, con licencia de Python Software Foundation License. Sólo es compatible con la versión 2.7, la versión 3 se está desarrollando actualmente.
Diferencias con CPython:
- Integración estrecha con JVM.
- Las cuerdas son Unicode.
- No admite extensiones para CPython escritas en C.
- No sufre de Global Intérprete Lock.
- El rendimiento suele ser menor, aunque depende de las pruebas.
Hola Mundo
print "Hello World!"
También puedes usar las funciones de Java:
from java.lang import System
System.out.println("Hello World!")
enlaces externos
Transcrypt
Transcrypt es una herramienta para precompilar un subconjunto bastante extenso de Python en un Javascript compacto y legible. Tiene las siguientes características:
- Permite la programación OO clásica con herencia múltiple utilizando la sintaxis de Python pura, analizada por el analizador nativo de CPython
- Integración perfecta con el universo de bibliotecas de JavaScript de alta calidad orientadas a la web, en lugar de las de Python orientadas al escritorio
- Sistema de módulo jerárquico basado en URL que permite la distribución de módulos a través de PyPi
- Relación simple entre la fuente Python y el código JavaScript generado para una fácil depuración
- Mapas de referencia de niveles múltiples y anotación opcional del código de destino con referencias de origen
- Descargas compactas, kB's en lugar de MB's
- Código JavaScript optimizado, que utiliza memoization (almacenamiento en caché de llamadas) para omitir opcionalmente la cadena de búsqueda de prototipos
- La sobrecarga del operador se puede activar y desactivar localmente para facilitar las matemáticas numéricas legibles
Tamaño y velocidad del código
La experiencia ha demostrado que 650 kB de código fuente de Python se traducen aproximadamente en la misma cantidad de código fuente de JavaScript. La velocidad coincide con la velocidad del JavaScript manuscrito y puede sobrepasarlo si la memorización de llamadas está activada.
Integración con 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>
Integración con JavaScript y 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 ()
Integración con otras bibliotecas de JavaScript
Transcrypt se puede utilizar en combinación con cualquier biblioteca de JavaScript sin medidas ni sintaxis especiales. En la documentación se dan ejemplos para ao react.js, riot.js, fabric.js y node.js.
Relación entre Python y código JavaScript
Pitón
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');
enlaces externos
- Sitio web oficial: http://www.transcrypt.org/
- Repositorio: https://github.com/JdeH/Transcrypt