Мы поможем в написании ваших работ!
ЗНАЕТЕ ЛИ ВЫ?
|
import StringIO, token, tokenize
Содержание книги
- quot;""Занесение нового элемента в контейнер и оповещение потоков"""
- Следующий пример иллюстрирует параллельность выполнения потоков,используя возможности библиотеки графических примитивов Tkinter(она входит в стандартную
- quot;""Выход из программы"""
- Параллельное программирование требует тщательной отработки взаимодействия между потоками управления.Некоторые участки кода необходимо ограждать от одновременного
- В лекции будет рассматриваться пакетtkinter,который по сути является оберткой дляtcl/tk - известного графического пакета для сценарного языка tcl. На примере этого
- Вхождение курсора в пределы виджета
- Focusin. Получение фокуса окном. Focusout. Keypress. Нажатие клавиши на клавиатуре. Keyrelease. Отжатие клавиши на клавиатуре. Выход курсора за пределы виджета. Motion. Движение мыши в пределах виджета. Mousewheel. Прокрутка колесика мыши. Reparent. Измен
- tk = Tk() # основное окно приложения
- Создание и конфигурирование виджета
- from Tkinter import * tk = Tk()
- При желании можно задать стилевые опции для всех виджетов сразу:с помощью метода tk_setpalette(). Помимо использованных выше свойств в этом методе можно
- from Tkinter import * import urllib
- from Tkinter import * tk = Tk()
- b[1, 3].pack(side=BOTTOM, fill=Y) b[1, 4].pack(side=BOTTOM, fill=BOTH)
- import Tkinter, Image, ImageTk
- start=0, extent=150, fill="blue")
- c.itemconfigure(CURRENT, fill=choice(colors))
- c = Canvas(tk, height=300, bg="white")
- Виджеты располагаются внутри другого виджета(например,рамки)в соответствии с набором правил.Этот набор правил реализуют менеджеры расположения,которых в
- Лекция#13:ИнтеграцияPythonс другими языками
- Py_Finalize(),Py_NewInterpreter(),Py_EndInterpreter(),Py_SetProgramName() и
- include "Python.h" #include "md5.h"
- number of bits, modulo 2^64 (lsb
- return PyString_FromStringAndSize((char *)aDigest, 16);
- MD5_new(PyObject *self, PyObject *args)
- Пример встраивания интерпретатора в программу на C
- Здесь же следует сделать Еще одно замечание:программа,встраивающаяpython,не должна много раз выполнять py_initialize() и py_finalize(),так как это может
- File : freq.i */ %module freq. typemap(out) int * { int i;. result = PyTuple_New(256); for(i=0; i<256; i++). PyTuple_SetItem($result, i, PyLong_FromLong($1[i])); free($1);. extern int * frequency(char s[]);. swig -python freq.i. I/usr/local/lib/python2
- PyLong_FromLong(result[i])); free(result);
- X, Y = self.getSize().width, self.getSize().height label.setText("%s x %s" % (X, Y))
- panel.add(button, "South") lines = Lines() panel.add(lines, 'Center')
- print " yes:", query
- let foo_bar_print = pywrap_closure
- import StringIO, token, tokenize
- prog_example = """
- import pprint, token, parser, symbol
- Здесь необходимо заметить,что недавно вPythonпоявился пакет compiler,который
- Отладка. lst.append(ord(i)) return lst. gt; lst = [] (Pdb) n. gt; /examples/myfun.py(6)fun() -> lst.append(ord(i)). usr/bin/python. File myfun.py. gt; lst.append(ord(i)). Pdb) p vars(). i': 'A', 's': 'ABCDE', 'lst': []} (Pdb) n. Pdb) p vars(). i':
- print "\n".join(difflib.get_close_matches(word + "\n", open("russian.txt")))
- profile:0(print_close_matches("профайлер"))
- t = Timer(""" res = ""
- Следует учитывать,что программа,реализующая некоторый алгоритм,не может быть оптимизирована до бесконечно малого времени вычисления:используемый алгоритм имеет
- from string import split a = "x y z"
- import string a = "a b c"
- gt;>> issubclass(str, basestring) True
- inspect.getmoduleinfo('/usr/local/lib/python2.3/inspect.pyc') ('inspect', '.pyc', 'rb', 2)
- gt;>> inspect.getsourcefile(inspect)
- x1', 'y1'], ['x2', 'y2']], None, None, None)
- f_back : <frame object at 0x812383c>
- Одно из наиболее частых применений модуля traceback- "мягкая"обработка исключений
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:идентификаторы и ключевые слова(NAME),литералы(STRING, NUMBER и т.п.), операции (OP), разделители, специальные лексемы для обозначения(изменения)отступов(INDENT, DEDENT)и концов строк(NEWLINE),а также комментарии(COMMENT).Лексический анализатор доступен через модуль tokenize,а определения кодов лексем содержатся в модуле token стандартной библиотекиPython.Следующий пример показывает лексический анализатор в действии:
|