Быстрый в изучении - мощный в программировании
Скрипт ИНВЕСТОР на Python

Попробуйте себя в качестве инвестора имея в помощники мощный алгоритм советника на Python...

Все уроки по PyQt5

PyQt5 реализован как комплект Python-модулей. Он включает в себя около 620 классов и 6000 функций и методов...

Скрипт отправки SMS через Python

Была задача отправить SMS-ки большому списку номеров телефона с уточнением цены за всю рассылку "До" ее отправки...

Python для начинающих

Подписаться на эту рубрику по RSS

Обучающие статьи программированию на Python. Пишем от простых программ до более сложных и изучаем мощный язык программирования Python.

Объектно-ориентированное программирование в python

Объектно-ориентированное программирование (ООП) - это способ организации программы позволяющий использовать один и тот же код многократно. В отличие от функции и модулей ООП позволяет не только разделить программу на фрагменты, но и описать предметы реального мира в виде объектов, а также организовать связи между этими объектами.

Основным "кирпичиком" ООП является класс. Классы в Python - это объект, включающий набор переменных и функций для управления этими переменными. Переменные называют атрибутами, а функции - методами. Класс является фабрикой объектов, т.е. позволяет создать неограниченное количество объектов, основанных на этом классе.

Определение класса и создание экземпляра класса в Python

Класс описывается с помощью ключевого слова class по следующей схеме:

class <Название класса>[(<Класс1>[, ..., <КлассN>])]:
    [""" Строка документирования """]
    <Описание атрибута и методов>

Инструкция создает новый объект и присваивает ссылку на него идентификатору, указанному после ключевого слова class. Это означает, что название класса должно полностью соответствовать правилам именований переменных. После названия класса в круглых скобках можно указать один или несколько базовых классов через запятую. Если класс не наследует базовые классы, то круглые скобки можно не указывать. Следует заметить, что все выражения внутри инструкции class выполняются при создании объекта, а не при создании экземпляра класса. В качестве примера создадим класс, внутри которого просто выводится сообщение:

Далее...

Работа с модулями в Python

Модулем в языке Python называется любой файл с программой. Каждый модуль может импортировать другой модуль, получая, таким образом, доступ к идентификаторам внутри импортированного модуля. Следует заметить, что импортируемый модуль может содержать программу не только на языке Python. Например, можно импортировать скомпилированный модуль, написанный на языке C.

Все программы, которые мы запускали ранее, были расположены в модуле с названием "__main__". Получить имя модуля позволяет предопределенный атрибут __name__. Атрибут __name__ для запускаемого модуля содержит значение "__main__", а для импортируемого модуля - его имя. Выведем название модуля:

print __name__    # Выведет: __main__

Проверить, является модуль главной программой или импортированным модулем, позволяет код, приведенный в листинге ниже.

Проверка способа запуска модуля

if __name__ == "__main__":
    print "Это главная программа"
else:
    print "Импортированный модуль"

Инструкция import

Импортировать модуль позволяет инструкция import. Мы уже не раз использовали эту инструкцию для подключения встроенных модулей. Например, подключали модуль time для получения текущей даты с помощью функции strftime():

import time            # Импортируем модуль
print time.strftime("%d.%m.%Y")    # Выводим текущую дату
Далее...

Модуль calendar

Модуль calendar позволяет вывести календарь в виде простого текста или в HTML формате. Прежде чем использовать модуль, необходимо подключить его с помощью выражения:

import calendar

Модуль предоставляет следующие классы:

Calendar - базовый класс, который наследует все остальные классы. формат конструктор:

Calendar([<Первый день недели>])

В качестве примера получим двухмерный список всех дней в январе 2013 года, распределение по дням недели:

import calendar
c = calendar.Calendar(0)
print c.monthdayscalendar(2013, 1) # 1 - это январь
Далее...

Парсер HTML Python

В практике любого программиста наступает задача скопировать некий материал с сайта. Так как страниц достаточно много не стоит терять время на ручное копирование. Ведь, языки программирования нужны для того чтобы избавится от рутинной работы и автоматизировать разные задачи. В Python есть отличная библиотека для работы с HTML. С ней можно парсить не только сайты но и обычные html документы. Хорошим преимуществом данной библиотеки является персональный алгоритм структурирования HTML кода, что позволяет программисту сэкономить время работы.

Но, проблемы в работе с html документами могут все равно появляться. HTML не имеет строгую структуру кода и некоторые верстальщики дают волю фантазии и изобретают свою структуру кода. Могут возникнуть и проблемы с кодировкой, что создаст новые проблемы для структурирования кода и получения данных.

Мы не будем воровать контент с других сайтов чтобы продемонстрировать библиотеку в работе, примеры будем делать на нашем сайте. Администрация pythonworld, поблагодарит нас за это и пойдем дальше.

Установка библиотеки Beautiful Soup (Linux)

$ apt-get install python-bs4
$ apt-get install python-lxml
$ apt-get install python-html5lib

Библиотека Beautiful Soup предназначена для работы с Python 2, но так же умеет работать с кодом Python 3. После установки и python-html5lib, можно будет парсить и современные документы стандарта HTML5.

Далее...

циклы в Python

Для организации циклов наиболее часто используется инструкция for, которая позволяет выполнить обход элементов коллекции. Итерации – одна из самых богатых особенностей языка Python. Однако наиболее часто используемой формой итераций является простой цикл по элементам последовательности, такой как строка, список или кортеж. Пример реализации итераций приводится ниже:

# -*- coding: utf-8 -*-
for n in [1,2,3,4,5,6,7,8,9]:
    print "2 в степени %d = %d" % (n, 2**n)

В данном примере на каждой итерации переменная n будет последовательно получать значения из списка [1,2,3,4,...,9]. Поскольку необходимость организовать цикл по фиксированному диапазону целочисленных значений возникает достаточно часто, для этих целей используется сокращенная форма записи:

for n in range(1, 10):
    print "2 в степени %d = %d" % (n, 2**n)

Функция range(i,j [,stride]) создает объект, представляющий диапазон целых чисел со значениями от i по j-1. Если начальное значение не указано, оно берется равным нулю. В третьем необязательном аргументе stride можно передать шаг изменения значений. Например:

Далее...

Словари в Python

Словарь является ассоциативным массивом или таблицей хешей, содержащий объекты, индексированные ключами. Чтобы создать словарь, последовательность элементов необходима заключить в фигурные скобки ({}), как показано в примере ниже.

Для получения значения словаря, его содержимое вызывается с помощью ключа. Ключ должен быть уникальным по отношению к другим, если ключ в словаре дублируется, то значение ключа будет тот кто ближе к концу словаря.

person = {
    'name': 'Ваня',
    'age': 18,
}
Объекты из словарях, можно изменять по своему желанию следующим образом.

person = {
    'name': 'Ваня',
    'age': 18,
}
person['name'] = 'John'
print person # Вернет: {'age': 18, 'name': 'John'}
Чаще всего в качестве ключей применяются строки, тем не менее, для этих целей допускается использовать большинство других объектов языка Python, включая числа и кортежи. Определенные объекты, включая списки и словари, не могут использоваться в качестве ключей, потому что их содержимое может изменяться.

Далее...

Создание функции Python

Функции являются отличным помощником во всех языках программирования. Они способствуют улучшению кода за счет выполнения ими повторных задании без нужны дублировать код для получения результата без использования функции. Код функции должен быть как можно более компактнее. Функция должна выполнять только одну операцию. Она должна выполнять ее хорошо и ничего другого она делать не должна. Чтобы создать читабельный код для вам и для других программистов вы должны следить за ним. Вы работаете с с чистым кодом, если каждая функция в основном делает то, что вы от нее ожидали. Половина усилий по реализации этого принципа сводится к выбору хороших имен для компактных функции, выполняющих одну операцию.

Чем меньше и специализированнее код функции, тем проще выбрать для нее понятное имя. Не бойтесь использовать длинные имена. Длинное содержательное имя лучше короткого невразумительного. Будьте последовательны в выборе имени. Используйте в имени функции те же словосочетания, глаголы и существительные, которые используются в ваших модулях. Создание функции производится с помощью инструкции def, как показано в следующем примере. Мы уже научились работать со списками в python, давайте воспользуется знаниями тут.

# -*- coding: utf-8 -*-
Phones = ['Nokia', 'Samsung', 'LG', 'Sony']
def show_as_text(user_list):
    words = ''
    for value in user_list:
        words += str(value) + ' '
    return words
print 'Phones: ', show_as_text(Phones) # Вернет: Phones:  Nokia Samsung LG Sony
Далее...

списки в python

Списки - последовательности произвольных объектов. Списки можно создать путем заключения элементов списка в квадратные скобки, как в примере ниже. Получить значение из списка можно указывая его индекс, списки индексируются целыми числами. Первый элемент списка имеет индекс, равным нулю. Для доступа к остальным элементам списка используются оператор индексирования.

# -*- coding: utf-8 -*-
cars = ['BMW', 'Mercedes', 'Ford']
print (cars[0]) # Выведет первый элемент списка BMW
print (cars[2]) # Последний элемент списка Ford

Довольно простые примеры. Попробуем добавить в конце списка новый элемент Audi. Для добавления новых элементов в конце списка используется метод append().

cars.append('Audi')
print (cars) # Получим: ['BMW', 'Mercedes', 'Ford', 'Audi']

Для добавления нового элемента по середине или перед любым другим элементом используется метод insert(order_num, value)

cars.insert(2, 'Mitsubishi')
print (cars) # Получили: ['BMW', 'Mercedes', 'Mitsubishi', 'Ford', 'Audi']

Воспользуемся оператором среза чтобы извлекать и изменять целые фрагменты списков.

cars = ['BMW', 'Mercedes', 'Mitsubishi', 'Ford', 'Audi']
first_two = cars[0:2]       # Первые два элементы списка, вернет: ['BMW', 'Mercedes']
another_cars = cars[3:]     # Все элементы в списке после 3-го включая его. Вернет: ['Ford', 'Audi']
cars[1] = 'Mercedes-Benz'   # Заменяет значение второго элемента на новое
print (cars)                # Получим: ['BMW', 'Mercedes-Benz', 'Mitsubishi', 'Ford', 'Audi']
Далее...

Чтение из файла на Python

Создавая логирование действии, сохраняя из интернета изображения, читая построчно из файла и многие другие действия которые требуют от нас запись, сохранения и чтение, в Python выполняется весьма просто и быстро. В случае сохранения данных в файл, папка в которой находится файл должна иметь права 777. Следующая программа открывает файл и читает его содержимое построчно:

# -*- coding: utf-8 -*-
f = open('power.txt')
line = f.readline()
while line:
    print (line),
    line = f.readline()
f.close()

Функция open() возвращает новый файловой объект. Вызывая методы этого объекта можно выполнять разные действия над файлом, такие как чтение и запись. Метод readline() который мы использовали в примере выше, читает одну строку из файла, завершая символом перевода строки. Используя данный метод, для чтения файла нам понадобится цикл while, и в теле цикла вызывать readline() чтобы читать следующею строку. После чтения всего файла, метод возвращает пустую строку т.е. False, вот тогда цикл while и завершает свою работу.

Можно читать из файла построчно не используя при этом цикл while, данный способ более прост и читабельней.

# -*- coding: utf-8 -*-
f = open('power.txt')
for line in f.readlines():
    print (line),
Метод readlines() отличается одной добавленной буквой и строит обратить внимание на это, часто ошибаются и используют readline() и не понимают почему выдают всего лишь одну строку. readline() и readlines() выполняют одну и ту же операцию - читаю построчно данные из файла, но возвращают разные данные. readlines() возвращает список в котором содержится строки из файла.

Далее...

Python SMTPlib

Недавно пришлось написать небольшой скрипт для рассылки писем к читателям с одного проекта. На PHP у меня уже ранее реализован данный скрипт, но т.к. я перешел программировать на Python мне нужно больше практики для понимания языка. Хочу сказать, что по сравнению с PHP, собственная smtp библиотека от Python гораздо удобнее для настройки в случае если нам нужна аутентификация с другого почтового сервиса.

Плюсы и минусы

Написал небольшую функцию которая должна отвечать всем вашим требованиям. Некоторые моменты с которыми были бы костыли в PHP, в Python реализованы весьма логично. Например отправлять массовое сообщение на PHP, пришлось создавать цикл и каждому получателю отправлять отдельное письмо через вызов mail(). Python нам сразу предлагает указать все нужные адресаты в общий список и передать ему - он сам разберется.

В PHP мне иногда приходилось мучится с кодировкой. Когда проверяешь и видишь, что все в порядке с кодировкой но письмо опять с иероглифами, это очень сильно бесит. Несмотря на то, что в Python, модуль smtplib принимает текст письма исключительно в ASCII, проблема с русским языков исчезает сразу если указать кодировку в самом скрипте т.е.

Далее...