Jython - это язык программирования 100% Pure Java. Он позволяет полностью перевести исходный код языка Python в байт-код Java, и запустить полученный байт-код на любой Java Virtual Machine. Это совершенно незаметная и плавная интеграция с Java. Из Python вы можете получить доступ ко всем библиотекам Java, строить приложения, интегрироваться с Java bean и разбивать на подклассы Python классы Java, и наоборот. Аналогично языку Python и в отличие от Java, JPython может использоваться интерактивно; просто наберите некий код на JPython в строке приглашения и вы немедленно увидите результаты.
В более простых терминах, JPython позволяет вам составить скрипт для любого нужного вам Java-кода, переходящий при этом в код, который по количеству строк меньше исходного в два-десять раз. Поскольку Python является языком, с димамической типизацией, вы, к тому же, можете разрабатывать приложения быстрее и с меньшим количеством ошибок, получая в результате более гибкую программу. Jython можно получить на http://www.jython.org/.
Jyhon содержит несколько элементов:
jython
, интерпретатор Jython.jythonc
, перекомпилирующий программу на Jython в файлы классов Java. Полученные в результате файлы классов Java могут использоваться как любые другие файлы классов Java, например, как апплеты, сервлеты или beans.Рассмотрим программу ButtonDemo.py, результат работы которой представлен на рисунке.
import java from pawt import swing def exit(e): java.lang.System.exit(0) frame = swing.JFrame('Swing Example', visible=1) button = swing.JButton('Close Me!', actionPerformed=exit) frame.setDefaultCloseOperation(3) frame.contentPane.add(button) frame.pack()Забрать пример
Эта простая программа демонстрирует, насколько просто создавать программы на Jython, использующие библиотеку компонентов Swing
. Первая строка импортирует пакет java, необходимый нам для вызова java.lang.System.exit()
.Вторая строка импортирует Java-пакет swing (модуль pawt вычисляет точное местонахождение Swing, который может находиться в javax.swing
или, возможно, в com.sun.java.swing
). Четвертая строка создает рамку JFrame
, присваивая ее свойству visible
значение "истина". Пятая строка создает кнопку JButton
с меткой и определяет, какая функция должна вызываться при нажатии этой кнопки. Шестая строка вызывает метод setDefaultCloseOperation, который указывает, что следует делать при закрытии ока(3 эквивалентно EXIT_ON_CLOSE). И наконец, последние две строки помещают кнопку JButton
в рамку JFrame
и делают это все видимым.
Для того чтобы упростить использование библиотек Java, Jython выполняет большой объем работы незаметно для пользователямя. Например, когда Jython импортирует пакет Java, он активно исследует соответствующий пакет, и затем, используя Java Reflection API, находит содержимое пакетов и подписи классов и методов. Кроме того, Jython "на лету" конвертирует между собой типы Python и Java. В ButtonDemo.py, например, текст кнопки ('This is a Swinging example!'
) представляет собой строку Python. Перед вызовом конструктора для JButton, Jython находит наиболее подходящий конструктор (например, отклоняя версию, принимающую Icon в качестве первого аргумента), и автоматически конвертирует строковый объект Python в строковый объект Java. Более сложные механизмы позволяют конструктору JButton
принимать ключевой параметр actionPerformed=exit
. Такой стиль невозможен в Java, поскольку Java не имеет возможности манипулировать функциями (или методами) как объектами первого класса. Jython исключает необходимость создания класса ActionListener
с единственным методом actionPerformed
, хотя при желании вы можете использовать более многословную форму.
Если у вас есть какие-то вопросы - пишите.