import sys
from PyQt4 import QtGui,QtCore
def foo(s): #Объявляем процедуру foo
print (s)
app = QtGui.QApplication(sys.argv)# Создаем объект app (приложение) - экземпляр класса QApplication
w = QtGui.QWidget() # Создаем объект w - окно - экземпляр класса QWidget()
w.resize(250, 30) # Вызываем метод resize объекта w
e = QtGui.QLineEdit(w) # Создаем объект e - поле ввода - экземпляр класса QLineEdit(), дочерний по отношению к w
w.connect(e, QtCore.SIGNAL('textChanged(QString)'), foo) #Связали процедуру foo с событием изменение текста
w.show() # Отображаем окно
app. exec _()
Подводные камни
Нужно помнить, что операция присвоения элемента списка не создаёт новый объект, а создаёт только ссылку на этот элемент.
Пример: если следующим образом напишем функцию, которая суммирует элементы списка:
def mysum(x):
s=x[0]
for i in x[1:]:
s+=i
return s
То в результате её выполнения первый элемент списка изменит своё значение на результат функции s, мы же приравняли их друг другу! Чтобы этого избежать, можно использовать команду создания копии массива (если элементом списка является массив)
s=x[0].copy()
Восхищение Python
В данной главе собраны примечательные конструкции языка, которые выгодно отличаются простотой и лаконичностью на фоне других языков программирования и матпакетов.
· В библиотеке numpy запись численных методов для систем уравнений не отличается от записи численных методов уравнений одной переменной, поскольку операции над векторами и матрицами записываются аналогично операциям над скалярными величинами.
· Функция max() вычисляет максимальное значение любого итерируемого типа. Не требует даже приведения типа к кортежу.
Парсинг текстовых документов
Интенсификация работы с данными привела к увеличению как количества доступной информации, так и энтропии в ней. В результате, теперь, если нам нужно найти или собрать определённую информацию, браузер нам выдаст множество документов, единственная сложность остаётся извлечь из этих документов именно то, что нам нужно. То же самое касается и сохранённых документов на диске даже собственной разработки. Объёмы обрабатываемой информации такие, что вручную её обработать крайне сложно. Компьютерное «чтение» текстовых файлов в различных форматах: txt, docx, pdf – называется парсингом.
Если на первом этапе парсинга обработать документ с помощью регулярных выражений, можно значительно упростить обработку. Например, расставить разделители для использования в функции split().
Револьверный метод
Часто чем делать сложное регулярное выражение проще заменить его на последовательность простых. Этот метод позволяет делать удивительно гибкие алгоритмы.
Типичный пример – это удаление любого числа пробелов путём замены двух пробелов на один.
Или, например, удаление знаков “-” после “;”, если между ними могут быть, а могут и не быть пробелы. Сначала добавляем пробелы, потом нормализуем их количество, потом заменяем “; -” на “; ”
Полезные советы Python
· Переместить выделенный блок текста на уровень влево/вправо в большинстве редакторов можно с помощью клавиш Tab и Shift+Tab.
· Никогда не называйте файлы именами модулей Python! Это бывает очень заманчиво, но приведёт к тому, что интерпретатор всегда будет обращаться вместо модуля к этому файлу.
· Используйте генераторы списков.
· Полезная возможность - упаковка и распаковка аргументов функции с помощью оператора ‘*’ 0.
· Ошибка
Syntax Error: invalid syntax
, указывающая на конец совершенно обычной команды, например
for j in range(jmax):
может быть следствием НЕЗАКРЫТОЙ СКОБКИ в предыдущей строке.
· В оболочке Spyder есть неудобство, что отсутствует механизм ввода греческих букв.
Вывести греческий алфавит (чтобы скопировать нужные символы) поможет следующая простая программа на Python
for k in [0x0391,0x03B1]:
for i in range(k,k+25):
print (chr(i), end=' ')
print ()
·
Рецепты Python
Сцепить строки
Очень полезная функция "".join(), аргументом который является список строк, а текстовая часть будет разделителем.
Изменить строку
Как известно, строки в Питоне неизменяемы, для изменения в некоторых случаях можно использовать массив символов, который соединяется в одну строку функцией "".join() (см. рецепт «Сцепить строки»).






