Чтение онлайн

на главную - закладки

Жанры

Язык программирования Python
Шрифт:

Листинг

# Импортируются модули из Java

from java.lang import System

from java.awt import *

# А это модуль из Jython

import random

# Класс для рисования линий на рисунке

class Lines(Canvas):

# Реализация метода paint

def paint(self, g):

X, Y = self.getSize.width, self.getSize.height

label.setText("%s x %s» % (X, Y))

for i in range(100):

x1, y1 = random.randint(1, X), random.randint(1, Y)

x2, y2 = random.randint(1, X), random.randint(1, Y)

g.drawLine(x1, y1, x2, y2)

#

Метки, кнопки и т.п.

panel = Panel(layout=BorderLayout)

label = Label(«Size», Label.RIGHT)

panel.add(label, «North»)

button = Button(«QUIT», actionPerformed=lambda e: System.exit(0))

panel.add(button, «South»)

lines = Lines

panel.add(lines, 'Center')

# Запуск панели в окне

import pawt

pawt.test(panel, size=(240, 240))

Программы на Jython можно компилировать в Java и собирать в jar–архивы. Для создания jar–архива на основе модуля (или пакета) можно применить команду jythonc, которая входит в комплект Jython. Из командной строки это можно сделать примерно так:

Листинг

jythonс–d–c–j lns.jar lines.py

Для запуска приложения достаточно запустить lines из командной строки:

Листинг

java–classpath "$CLASSPATH» lines

В переменной $CLASSPATH должны быть пути к архивам lns.jar и jython.jar.

Prolog

Для тех, кто хочет использовать Prolog из Python, существует несколько возможностей:

Версия GNU Prolog (сайт: интегрируется с Python посредством пакета bedevere (сайт:

Имеется пакет PyLog для работы с SWI–Prolog из Python

Можно использовать пакет pylog (доступен с сайта:, который добавляет основные возможности Prolog в Python

Эти три варианта реализуют различные способы интеграции возможностей Prolog в Python. Первый вариант использует SWIG, второй организует общение с Prolog–системой через конвейер, а третий является специализированной реализацией Prolog.

Следующий пример показывает использование модуля pylog:

Листинг

from pylog import *

exec(compile(r»""

man('Socrates').

man('Democritus').

mortal(X) : — man(X).

«""))

WHO = Var

queries = [mortal('Socrates'),

man(WHO),

mortal(WHO)]

for query in queries:

print "?», query

for _ in query:

print " yes:", query

Что выдает результат:

Листинг

? mortal(Socrates)

yes: mortal(Socrates)

? man(_)

yes: man(Socrates)

yes: man(Democritus)

? mortal(_)

yes: mortal(Socrates)

yes: mortal(Democritus)

Разумеется, это не «настоящий» Prolog, но с помощью модуля pylog любой, кому требуются логические возможности Prolog в Python, может написать программу с использованием Prolog–синтаксиса.

OCaml

Язык программирования OCaml — это язык функционального программирования (семейства ML, что означает Meta Language), созданный в институте INRIA, Франция. Важной особенностью OCaml является то, что его компилятор порождает исполняемый код, по быстродействию

сравнимый с С, родной для платформ, на которых OCaml реализован. В то же время, будучи функциональным по своей природе, он приближается к Python по степени выразительности. Именно поэтому для OCaml была создана библиотека Pycaml, фактически реализующая аналог C API для OCaml. Таким образом, в программах на OCaml могут использоваться модули языка Python, в них даже может быть встроен интерпретатор Python. Для Python имеется большое множество адаптированных C–библиотек, это дает возможность пользователям OCaml применять в разработке комбинированное преимущество Python и OCaml. Минусом является только необходимость знать функции Python/C API, имена которого использованы для связи OCaml и Python.

Следующий пример (из Pycaml) показывает программу для OCaml, которая определяет модуль для Python на OCaml и вызывает встроенный интерпретатор Python:

Листинг

let foo_bar_print = pywrap_closure

(fun x -> pytuple_fromarray (pytuple_toarray x)) ;;

let sd = pyimport_getmoduledict ;;

let mx = pymodule_new «CamlModule» ;;

let cd = pydict_new ;;

let cx = pyclass_new (pynull , cd, pystring_fromstring «CamlClass») ;;

let cmx = pymethod_new (foo_bar_print,(pynull ),cx) ;;

let _ = pydict_setitemstring (cd, «CamlMethod», cmx) ;;

let _ = pydict_setitemstring (pymodule_getdict mx, «CamlClass», cx) ;;

let _ = pydict_setitemstring (sd, «CamlModule», mx) ;;

let _ = pyrun_simplestring

(«from CamlModule import CamlClass\n» ^

«x = CamlClass\n» ^

«for i in range(100000):\n» ^

« x.CamlMethod(1,2,3,4)\n» ^

«print 'Done'\n»)

Pyrex

Для написания модулей расширения можно использовать специальный язык — Pyrex — который совмещает синтаксис Python и типы данных C. Компилятор Pyrex написан на Python и превращает исходный файл (например, primes.pyx) в файл на C — готовый для компиляции модуль расширения. Язык Pyrex заботится об управлении памятью, удаляя после себя ставшие ненужными объекты. Пример файла из документации к Pyrex (для вычисления простых чисел):

Листинг

def primes(int kmax):

cdef int n, k, i

cdef int p[1000]

result = []

if kmax > 1000:

kmax = 1000

k = 0

n = 2

while k < kmax:

i = 0

while i < k and n % p[i] <> 0:

i = i + 1

if i == k:

p[k] = n

k = k + 1

result.append(n)

n = n + 1

return result

В результате применения компилятора Pyrex, нехитрой компиляции и компоновки (с помощью GCC):

Листинг

pyrexc primes.pyx

gcc primes.c–c–fPIC–I /usr/local/include/python2.3

gcc–shared primes.o–o primes.so

Получается модуль расширения с функцией primes:

Листинг

>>> import primes

>>> primes.primes(25)

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61,

67, 71, 73, 79, 83, 89, 97]

Разумеется, в Pyrex можно использовать C–библиотеки, именно поэтому он, как и SWIG, может служить для построения оберток C–библиотек для Python.

Поделиться:
Популярные книги

Локки 2. Потомок бога

Решетов Евгений Валерьевич
2. Локки
Фантастика:
городское фэнтези
аниме
попаданцы
5.00
рейтинг книги
Локки 2. Потомок бога

На границе империй. Том 2

INDIGO
2. Фортуна дама переменчивая
Фантастика:
космическая фантастика
7.35
рейтинг книги
На границе империй. Том 2

"Фантастика 2025-103". Компиляция. Книги 1-17

Поселягин Владимир Геннадьевич
Фантастика 2025. Компиляция
Фантастика:
боевая фантастика
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Фантастика 2025-103. Компиляция. Книги 1-17

Спасите меня, Кацураги-сан! Том 5

Аржанов Алексей
5. Токийский лекарь
Фантастика:
городское фэнтези
попаданцы
дорама
5.00
рейтинг книги
Спасите меня, Кацураги-сан! Том 5

В лапах зверя

Зайцева Мария
1. Звериные повадки Симоновых
Любовные романы:
остросюжетные любовные романы
эро литература
5.00
рейтинг книги
В лапах зверя

Дважды одаренный

Тарс Элиан
1. Дважды одаренный
Фантастика:
альтернативная история
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Дважды одаренный

Совок

Агарев Вадим
1. Совок
Фантастика:
фэнтези
детективная фантастика
попаданцы
8.13
рейтинг книги
Совок

Кодекс Охотника. Книга XV

Винокуров Юрий
15. Кодекс Охотника
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XV

Черный рынок

Вайс Александр
6. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Черный рынок

Бастард Бога (Дилогия)

Матвеев Владимир
Фантастика:
альтернативная история
5.11
рейтинг книги
Бастард Бога (Дилогия)

Наследник жаждет титул

Тарс Элиан
4. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник жаждет титул

Сердце Дракона. нейросеть в мире боевых искусств (главы 1-650)

Клеванский Кирилл Сергеевич
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.51
рейтинг книги
Сердце Дракона. нейросеть в мире боевых искусств (главы 1-650)

Бракованная невеста. Академия драконов

Милославская Анастасия
Фантастика:
фэнтези
сказочная фантастика
5.00
рейтинг книги
Бракованная невеста. Академия драконов

Последний Паладин. Том 10

Саваровский Роман
10. Путь Паладина
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Последний Паладин. Том 10