четверг, 30 июня 2011 г.

От PHP к Python за 15 минут

Как-то у нас с менеджерами зашел разговор о том, сложно ли изучить язык программирования, если просит об этом заказчик. В частности был разговор о языке Python. Попытаюсь развеять миф о сложности освоения Python.

Python - это не .Net и не Java, где приходится осваивать довольно сложную библиотеку базовых классов. Здесь нет сложности в настройки IDE. Как-то работая в проекте на Java мне необходимо было потратить два дня только на настройку Netbeans.

Python идет в одном ряду с PHP и Perl. Чем-то похож на VB.NET. Кроме того он еще проще в освоении, чем PHP. Чтобы начать программировать в языках такого уровня необходимо только скачать бинарники и тупо начать, даже если вы ничего не знаете. Знания будут добываться по мере решения проблем.

Давайте рассмотрим, чем же отличаются PHP и Python. Я не буду описывать все тонкости, отмечу лишь самые главные моменты, которые помогут преодолеть барьер сложности.

  1. В python как и в php тип переменных назначается динамически, НО динамически не преобразуется. Т.е. вы не можете как в PHP использовать число там, где должна быть строка.
  2. Забудьте про фигурные скобочки для выделения блоков кода. Главное это отступы. Все структурирование осуществляется с помощью отступов. Вместо открывающей фигурной скобочки используется двоеточие. Конец блока определяется с помощью отступов. Чтобы разбить строку на несколько, используется обратный слэш в конце (аналог подчеркивания в VB.NET).
  3. Вместо слово function нужно писать def
  4. Все сущности включая функции являются объектами
  5. Определение ассоциативного массива (называется dictionary - словарь в python) похоже на JSON: a = {"server":"mpilgrim", "database":"master"}
  6. Определение списка тоже вам напомнит JSON: li = ["a", "b", "mpilgrim", "z", "example"]
  7. В язык встроены довольно мощные средства по манипуляции со списками:
    1. Получение последнего элемента: li[-1]
    2. Выделение подсписка: li[1:3]. Можно даже так: li[3:] или так: li[:]
    3. Можно складывать и размножать списки ( list * 3 = list + list + list).
    4. Применение выражения ко всем элементам списка с помощью конструкции [elem*2 for elem in li]. Так мы получим новый список, где каждый элемент старого списка умножен на два. Список в такой операции может быть списком кортежей, тогда после for указывается не одна, а несколько переменных. Более подробно см. http://ru.diveintopython.org/odbchelper_map.html и http://ru.diveintopython.org/apihelper_filter.html
  8. Есть упрощенный вариант списков - кортежи (tuple), которые объявляются с помощью круглых скобок вместо квадратных. Их можно назвать константными списками, которыми нельзя так легко манипулировать. Кортежы более быстро работают и могут быть ключами для словарей.
  9. В python есть возможность использовать кортеж слева от знака присваивания. Вот как можно быстро присвоить значения константам от 0 до 6: (MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7)
  10. Еще одна фича python - это подстановка значений в строку по шаблону: "%s is not a good password for %s" % (pwd, uid). Данное выражение вернет отформатированную строку аналогично функции sprintf.
  11. Вместо explode и implode используйте методы строки split и join
  12. Подгрузка внешнего файла осуществляется с помощью import module_name. После этого вы можете обращаться к функциям модуля с помощью module_name.func_name. Если вы не хотите постоянно указывать префикс "module_name.", то можете использовать конструкцию from module_name import *, либо from module_name import a, b, c. Здесь a,b,c - элементы, которые мы хотим импортировать в модуль.
  13. В функции можно устанавливать значения по умолчанию: def help(object, spacing=10, collapse=1)
  14. Как и в VB.NET при вызове функции можно указывать названия параметров, которым назначаются значения: help(spacing=15, object=odbchelper)
  15. В python есть lambda-функции. Ее можно определить как объект-функция без названия. Например: lambda x: x*2. Это функция, которая возвращает аргумент умноженный на два. Тут же можно вызвать функцию: (lambda x: x*2)(3)
Объектно-ориентированное программирование на python
  1. Объявление класса: "class FileInfo:"
  2. Объявление с наследованием: "class FileInfo(UserDict):"
  3. Аналог конструктора - метод __init__. Вызывается после создания объекта.
  4. Первый аргумент метода - всегда текущий экземпляр объекта. Общепринято называть self.
  5. Создание объекта: obj = FileInfo(x)
  6. Сеттеры и геттеры. Есть специальные названия методов __setitem__ и __getitem__. Если вы их объявили в классе, то можете использовать объект как словарь: f["name"]
  7. Если вы внутри класса объявите переменные, то это будут статические переменные и ими можно пользоваться без создания класса. Если вы хотите создать настоящие переменные-члены класса, то нужно их присвоить в методах с помощью self.var_name = value.
  8. Если вы хотите объявить приватный метод, то объявите его с помощью двух знаков подчеркивания в имени: __method. Не используйте два знака подчеркивания в конце. Это особенность системных методов. В действительности в python нет ничего приватного. Если вы захотите до чего-нибудь добраться, то вы сможете это сделать.
Материал составлен на основе книги В глубь языка Python

Комментариев нет:

Отправить комментарий