Введение

Примеры

IronPython

Реализация с открытым исходным кодом для .NET и Mono, написанная на C #, под лицензией Apache License 2.0. Это полагается на DLR (Динамическое Языковое Время выполнения). Он поддерживает только версию 2.7, версия 3 в настоящее время разрабатывается.

Отличия от CPython:

  • Тесная интеграция с .NET Framework.
  • Строки по умолчанию являются Unicode.
  • Не поддерживает расширения для CPython, написанные на C.
  • Не страдает от Глобальной блокировки интерпретатора.
  • Производительность обычно ниже, хотя это зависит от тестов.

Привет, мир

 print "Hello World!"

 

Вы также можете использовать функции .NET:

 import clr
from System import Console
Console.WriteLine("Hello World!")

 

внешняя ссылка

  • Официальный веб-сайт
  • GitHub репозиторий

Jython

Реализация с открытым исходным кодом для JVM, написанная на Java, по лицензии Python Software Foundation License. Он поддерживает только версию 2.7, версия 3 в настоящее время разрабатывается.

Отличия от CPython:

  • Тесная интеграция с JVM.
  • Строки являются Unicode.
  • Не поддерживает расширения для CPython, написанные на C.
  • Не страдает от Глобальной блокировки интерпретатора.
  • Производительность обычно ниже, хотя это зависит от тестов.

Привет, мир

 print "Hello World!"

 

Вы также можете использовать функции Java:

 from java.lang import System
System.out.println("Hello World!")

 

внешняя ссылка

  • Официальный веб-сайт
  • Mercurial хранилище

Transcrypt

Transcrypt - это инструмент для предварительной компиляции довольно обширного подмножества Python в компактный читаемый Javascript. Он имеет следующие характеристики:

  • Позволяет для классического ОО-программирования с множественным наследованием с использованием чистого синтаксиса Python, анализируемого собственным синтаксическим анализатором CPython
  • Полная интеграция с целым рядом высококачественных веб-ориентированных библиотек JavaScript, а не настольных Python
  • Модульная система на основе URL-адресов, позволяющая распространять модули через PyPi
  • Простая связь между исходным кодом Python и сгенерированным кодом JavaScript для легкой отладки
  • Многоуровневые исходные карты и дополнительная аннотация целевого кода со ссылками на источники
  • Компактные загрузки, КБ, а не МБ
  • Оптимизированный код JavaScript, использующий запоминание (кеширование вызовов) для необязательного обхода цепочки поиска прототипа
  • Перегрузка оператора может включаться и выключаться локально для облегчения чтения числовой математики

Размер кода и скорость

Опыт показывает, что 650 кБ исходного кода Python примерно соответствует тому же количеству исходного кода JavaScript. Скорость соответствует скорости рукописного JavaScript и может превзойти ее, если включена запись звонков.

Интеграция с 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>

 

Интеграция с JavaScript и 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 ()

 

Интеграция с другими библиотеками JavaScript

Transcrypt может использоваться в сочетании с любой библиотекой JavaScript без особых мер или синтаксиса. В документации приведены примеры для aoact.js, riot.js, fabric.js и node.js.

Связь между Python и кодом JavaScript

питон

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

 

внешняя ссылка

  • Официальный сайт: http://www.transcrypt.org/
  • Repository: https://github.com/JdeH/Transcrypt

Синтаксис

Параметры

Примечания