Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования PythonΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 54

Автор Π ΠΎΠΌΠ°Π½ Π‘ΡƒΠ·ΠΈ

  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 (сайт: http://gprolog.sourceforge.net) интСгрируСтся с Python посрСдством ΠΏΠ°ΠΊΠ΅Ρ‚Π° bedevere (сайт: http://bedevere.sourceforge.net)

β€’ Π˜ΠΌΠ΅Π΅Ρ‚ся ΠΏΠ°ΠΊΠ΅Ρ‚ PyLog (http://www.gocept.com/angebot/opensource/Pylog) для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с SWI–Prolog (http://www.swi–prolog.org) ΠΈΠ· Python

β€’ ΠœΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ pylog (доступСн с сайта: http://christophe.delord.free.fr/en/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.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ для простых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Pyrex примСняСт C, Π° для обращСния ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Python β€” Π²Ρ‹Π·ΠΎΠ²Ρ‹ Python/C API. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ΡΡ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Python ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ C. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ Π² Pyrex Π½Π΅ доступны, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, списковыС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ Unicode, ΠΎΠ΄Π½Π°ΠΊΠΎ, Ρ†Π΅Π»ΡŒ Pyrex β€” созданиС Π±Ρ‹ΡΡ‚Ρ€ΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, ΠΈ для этого ΠΎΠ½ прСвосходно ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚. ΠžΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡΡ с Pyrex ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ (которая, ΠΊ соТалСнию, Π΅ΡΡ‚ΡŒ ΠΏΠΎΠΊΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° английском языкС).

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ этой Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΊΡ€Π°Ρ‚ΠΊΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»ΠΈΡΡŒ основныС возмоТности ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… систСм программирования. Базовая рСализация языка Python написана Π½Π° C, поэтому Python ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс Python/C API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ Π½Π° C/C++ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ Python, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, модулям ΠΈ Ρ‚ΠΈΠΏΠ°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. Бостав Python/C API достаточно ΠΎΠ±ΡˆΠΈΡ€Π΅Π½, поэтому Ρ€Π΅Ρ‡ΡŒ шла лишь ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… основных Π΅Π³ΠΎ элСмСнтах.

Π‘Ρ‹Π» рассмотрСн процСсс написания модуля Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π½Π° C ΠΊΠ°ΠΊ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Ρ‚Π°ΠΊ ΠΈ с использованиСм Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° интСрфСйсов SWIG. Π’Π°ΠΊΠΆΠ΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ ΠΎ возмоТности встраивания ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Π‘ ΠΈΠ»ΠΈ OCaml.

Π―Π·Ρ‹ΠΊ Python (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ β€” Jython) ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ интСгрируСтся с языком Java: Π² Python-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, выполняСмой ΠΏΠΎΠ΄ Jython Π² Java-Π°ΠΏΠΏΠ»Π΅Ρ‚Π΅ ΠΈΠ»ΠΈ Java–прилоТСнии, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ практичСски Π»ΡŽΠ±Ρ‹Π΅ Java–классы.

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ языка Prolog Π±Ρ‹Π»ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ добавлСнию возмоТностСй логичСского Π²Ρ‹Π²ΠΎΠ΄Π° Π² Python–программы: нСзависимая рСализация Prolog-ΠΌΠ°ΡˆΠΈΠ½Ρ‹, связь с Prolog-ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€, связь Ρ‡Π΅Ρ€Π΅Π· Python/C API.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹ΠΉ Π³ΠΈΠ±Ρ€ΠΈΠ΄ C ΠΈ Python прСдставляСт ΠΈΠ· сСбя язык Pyrex. Π­Ρ‚ΠΎΡ‚ язык создан с Ρ†Π΅Π»ΡŒΡŽ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ написаниС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ для Python Π½Π° C, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ структуры Π΄Π°Π½Π½Ρ‹Ρ… C ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Python синтаксис. НСсмотря Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ смысловыС ΠΈ синтаксичСскиС отличия ΠΊΠ°ΠΊ ΠΎΡ‚ C, Ρ‚Π°ΠΊ ΠΈ ΠΎΡ‚ Python, язык Pyrex ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ сущСствСнно ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, сохранив ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ компилятора C ΠΈ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ синтаксис Python.

Π’ Π΄Π°Π½Π½ΠΎΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π΅ Π±Ρ‹Π»ΠΈ прСдставлСны Π΄Ρ€ΡƒΠ³ΠΈΠ΅ возмоТности ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° шаблонов C++ Boost Python, которая позволяСт ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Python ΠΈ C++. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΈΠ· Python ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, написанныС Π½Π° Π€ΠΎΡ€Ρ‚Ρ€Π°Π½Π΅ (ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ F2PY).

Π Π°Π·Π²ΠΈΡ‚Ρ‹Π΅ ΠΈ Π³ΠΈΠ±ΠΊΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ возмоТности Python ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΅Π³ΠΎ основным прСимущСством Π² качСствС языка для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Из Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π΅Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Python Π»Π΅Π³ΠΊΠΎ взаимодСйствуСт с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ систСмами.

Бсылки

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Boost Python для C++ http://www.boost.org

14. ЛСкция: Устройство ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° языка Python.

Π’ этой Π»Π΅ΠΊΡ†ΠΈΠΈ сдСлана ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΡ€ΠΎΠ»ΠΈΡ‚ΡŒ свСт Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ устройство ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python. Для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ, ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ ΠΈ «дизассСмблСр».

ЛСксичСский Π°Π½Π°Π»ΠΈΠ·

ЛСксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ языка программирования Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ исходный тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (состоящий ΠΈΠ· ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Ρ… символов) Π½Π° лСксСмы β€” Π½Π΅Π΄Π΅Π»ΠΈΠΌΡ‹Π΅ «слова» языка.