Кому и для чего нужен python?

Строки

Строки в Python обособляются кавычками двойными «»» или одинарными «’». Внутри двойных ковычек могут присутствовать одинарные или наоборот. К примеру строка «Он сказал ‘привет’!» будет выведена на экран как «Он сказал ‘привет’!». Если нужно использовать строку из несколько строчек, то эту строку надо начинать и заканчивать тремя двойными кавычками «»»»». Вы можете подставить в шаблон строки элементы из кортежа или словаря. Знак процента «%» между строкой и кортежем, заменяет в строке символы «%s» на элемент кортежа. Словари позволяют вставлять в строку элемент под заданным индексом. Для этого надо использовать в строке конструкцию «%(индекс)s». В этом случае вместо «%(индекс)s» будет подставлено значение словаря под заданным индексом.

Сравнение Python и Ruby

Первое, что следует отметить, это
популярность Ruby в сфере создания сайтов.
На этом языке, например, созданы Basecamp,
Github, Slideshare.

И Python, и Ruby являются объектно-ориентированными
языками, динамичными и гибкими. Но к
решению проблем они подходят по-разному.
Ruby предлагает несколько вариантов для
выбора, а Python — только один. Но этот факт
можно считать как преимуществом, так и
недостатком каждого из языков.

Самый распространенный фреймворк Ruby это Ruby-on-Rails. Он довольно похож на Django — фреймворк Python. Обе эти технологии имеют многочисленные сообщества.

Можно сказать, что в том, что касается
веб-разработки, оба фреймворка предлагают
примерно одинаковые условия, поскольку
каждую отдельную проблему можно решить
и при помощи Ruby-on-Rails, и с использованием
Django. Обе технологии быстры и эффективны.

Включение в последовательность

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

Python поддерживает концепцию под названием «включение в последовательность» (от англ. comprehension, в информатике эта операция так же называется описанием последовательности), которая суть изящный способ преобразования одной последовательности в другую. Во время этого процесса элементы могут быть условно включены и преобразованы заданной функцией. Вот один из вариантов общего формата операции включения в список:

В данном общем формате выражение – это выражение или функция с участием переменной, которые возвращают значение, переменная – это элемент последовательности, список – это обрабатываемый список, и выражение2 – это логическое выражение или предикативная функция с участием переменной. Чтобы все стало понятно, приведем простой пример возведения список в квадрат без условия:

Приведенное выше включение в список эквивалентно следующему ниже фрагменту программного кода:

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

В конструкции включения в последовательность используется математическая запись построения последовательности. Такая запись в теории множеств и логике называется определением интенсионала множества и описывает множество путем определения условия, которое должно выполняться для всех его членов. В сущности, в терминах этих областей науки, выполняя данную операцию в Python, мы «описываем интенсионал» соответственно списка, словаря, множества и итерируемой последовательности. Ниже приведены примеры описания интенсионала соответственно списка, словаря, множества и итерируемой последовательности.

Таблица 1. Формы описания интенсионала

Выражение

Описание

Описание списка

Описание словаря

Описание множества

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

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

Таким образом, примеры из разделов о функциях и легко можно переписать с использованием включения в последовательность. Например, в строке 3 приведенного ниже интерактивного сеанса вместо функции применена операция включения в список:

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

(Если бы последовательностей было три, то они объединялись бы в кортежи из трех элементов и т.д.)

Включение в список применено и в приведенном ниже примере вместо функции :

Квадратные скобки в определении сигнализируют, что в результате этой операции будет создан список. Какой способ обработки последовательностей применять – с использованием функций более высокого порядка или включений, зачастую является предметом личных предпочтений.

Списки, кортежи, множества и словари

Списки, кортежи, множества и словари – еще 4 типа данных в Питоне, включающие в себя несколько значений и являющиеся итерируемыми (перебираемыми, как строки).

Особенности показаны в таблице 3.

Список (list) Кортеж (tuple) Множество (set) Словарь (dict)
Изменяемый Неизменяемый Изменяемое Изменяемый
Значения могут дублироваться Значения могут дублироваться Значения не могут дублироваться Ключи не могут дублироваться
Доступ по индексу возможен Доступ по индексу возможен Доступ по индексу невозможен Есть доступ к ключам и значениям

Таблица 3 – Коллекции данных в Python

Список – последовательность произвольных элементов, разделенных запятой. Обозначается квадратными скобками. Можно доставать отдельные составляющие через индекс, добавить в начало списка или конец те или иные значения, удалить элементы, узнать длину, отсортировать.

Рассмотрим часть функционала.

Результат работы скрипта:

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

На их основании также возможны срезы, доступ по индексу, нахождение максимума или минимума (если элементы представлены числами), поиск количества вхождений значений.

Результат работы скрипта:

Множества хороши в ситуациях, когда нужна гарантия уникальности всех элементов. Задаются фигурными скобками. При добавлении дубликата размер сета никак не меняется

Важно и то, что порядок объектов внутри множества не гарантирован, что исключает доступ по индексу

Результат работы скрипта:

Словарь – особый тип коллекций. Все его элементы состоят из пар «ключ: значение». Ключ должен быть уникальным, а значения могут повторяться. Обозначается фигурными скобками.

Рассмотрим некоторые операции со словарями.

Результат работы скрипта:

Таким образом, в зависимости от ситуации применяется тот или иной тип коллекций. Чаще всего это списки и словари.

Кортежи, диапазоны, множества

Кортеж — это совокупность постоянных объектов любого типа в круглых скобках (или без них), которые отделяются друг от друга запятой.

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

Позиция элемента в кортеже определяется его индексом, нумерация начинается с нуля. В кортеже, как и в других последовательностях, можно получить элемент по его индексу, получить срез, конкатенацию, повторение, проверку на вхождение (оператор in) и не-вхождения.

Диапазон — это неизменная последовательность целых чисел с начальным, конечным значениями и шагом их изменения.

Множество — это неупорядоченная коллекция уникальных (тех, которые не повторяются) объектов любого типа.

Существует два типа множеств: переменная (set) и неизменная (frozenset ()). Множество переменного типа создается с помощью встроенной функции set, генераторов множеств, литералов множеств и других.

Синтаксис

Во первых стоит отметить интересную особенность Python. Он не содержит операторных скобок (begin..end в pascal или {..}в Си), вместо этого блоки выделяются отступами: пробелами или табуляцией, а вход в блок из операторов осуществляется двоеточием. Однострочные комментарии начинаются со знака фунта «#», многострочные — начинаются и заканчиваются тремя двойными кавычками «»»»».
Чтобы присвоить значение пременной используется знак «=», а для сравнения —
«==». Для увеличения значения переменной, или добавления к строке используется оператор «+=», а для уменьшения — «-=». Все эти операции могут взаимодействовать с большинством типов, в том числе со строками. Например

Типы данных

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

Числа

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

a = 5 
print(type(a))                  
# <class 'int'>

b = 1+4j
print(type(b))     
# <class 'complex'>

c = 4.5
print(type(c))  
# <class 'float'>

Посмотрите на вывод внимательно: класс переменной — предопределенный. Это значит, что его не нужно определять вручную, это уже сделано за нас. Целые числа (int) могут быть любой длины, но есть ограничение — объем вашей памяти. Числа с плавающей точкой (float) имеют ограничение точности — 15 знаков после точки. Если попытаетесь ввести больше — лишние будут отброшены.

a = 1.12345678912345678912
print(a) 
# 1.1234567891234568

Строки

Строка (str) — это набор символов Юникод. Для определения строки мы используем одинарные или двойные кавычки. 

Пример:

a = 'c'
print(type(a))
# <class 'str'>

b = "hello"
print(type(b))
# <class 'str'>

c = 'hello python'
print(type(c))
# <class 'str'>

Списки

Списки (list) — упорядоченная последовательность элементов. Это один из самых часто используемых типов данных в Python. Списки очень похожи на массивы, но в списках мы можем хранить элементы разного типа.

Списки изменяемы. Это означает, что мы можем изменить любое их значение при помощи индексов. 

lst = 
print(type(lst))
# <class 'list'>

lst = 
print(type(lst))
# <class 'list'>

lst = 
print(type(lst))
# <class 'list'>

lst = 
print(lst)
# 1

lst = 
lst=10
print(lst)
# 

Кортежи

Кортежи (tuple) — это также упорядоченные наборы элементов. От списков их отличает одно: кортежи неизменяемы. То есть, после объявления кортежа изменить его элементы мы не сможем.

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

t = (1,2,3)                              
print(type(t))
# <class 'tuple'>

t = (1,'hello',3.2)
print(type(t))
# <class 'tuple'>

t = (1,'hello',3.2)
print(t)
# 1

Множества 

Множество (set) — неупорядоченный набор элементов. Определяется множество с помощью фигурных скобок — . Все элементы разделяются запятыми. 

В множестве не может быть дубликатов. Это значит, что порой их можно использовать для того, чтобы избавиться от повторяющихся элементов списке. С множествами мы можем производить самые разные операции, например, объединение (union), пересечение (intersection).

Обратите внимание: получить доступ к элементу множества по индексу невозможно — они не упорядочены! 

a =  {1, 2, 3, 4, 5}
print(type(a))
# <class 'set'>

a =  {1, 2, 3, 4, 5}
print(a)
# TypeError: 'set' object is not subscriptable

a = {1, 2, 3, 4, 5}
b = {6,5,3,4}
print(a.union(b))
# {1, 2, 3, 4, 5, 6}

a = {1, 2, 3, 4, 5}
b = {6,5,3,4}
print(a.intersection(b))
# {3, 4, 5}

Словари

Словарь (dict) — набор элементов, в котором элементы хранятся в виде пар ключ-значение. Такая система оптимизирована под поиск значений, из-за чего словари часто используют для хранения огромных массивов данных. Определяются словари с помощью фигурных скобок в следующем виде —  . Пары элементов отделяются запятыми.

dict = {'name':'ivan', 'number':'99029922', 'address':'Moskva'}

print(dict)
# {'name': 'ivan', 'number': '99029922', 'address': 'Moskva'}

print(dict.keys())
# dict_keys()

print(dict.values())
# dict_values()

Особенности «Пайтона»

Многие специалисты считают, что «Пайтон» действительно упрощает написание кода, а также увеличивает скорость разработки. Да, можно программировать проще и быстрее, но это стало возможным благодаря следующим особенностям:

динамической типизации. Разработчику нет необходимости указывать тип переменных — язык его сам присвоит, а операнды различных типов, которые участвуют в одной операции, приведутся к нужному типу автоматически, но по определенным правилам;

удобному возврату функцией нескольких значений. Значения разработчик может перечислить через запятую, в результате чего они преобразуются в список, причем автоматически. К примеру, для возврата массива из функции, достаточно просто написать ““. То есть нет необходимости выделять память, передавать указатели в функцию;

автоматическому выделению памяти. Разработчику не надо самому выделять память под что-нибудь. Да, это снижает контроль над программой, однако есть и плюс: разработка реально ускоряется;

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

a, b = b, a. Мы только что изменили значения переменных с помощью этой простейшей строки. Что было в а, стало в b и наоборот. Такой способ удобен и позволяет обменивать значения трех, пяти и более переменных;

привязка типа данных. Тип данных в «Питоне» привязан ко значению, а не к переменной. Значение является каким-нибудь объектом с атрибутами, определяющими тип и иные характеристики этого объекта, а переменная является лишь ссылкой на данный объект

Чего позволяет достичь такой подход? Нет необходимости в явном определении типов, что существенно упрощает повторное присваивание значения переменной (что особенно важно, когда тип нового значения отличается от начального);

циклу for. В «Пайтоне» довольно удобно работать со списками, массивами и иными контейнерами

Если надо перебрать все его элементы, то конструкция кодового блока выглядит следующим образом: “” (то есть перебор осуществляется с нуля до последнего элемента; индекс можно обозначить как -1). Когда необходимо, чтобы выполнилось некоторое число циклов, пишут “” (циклический блок станет выполняться со значениями у от 1 до 7);

интерпретируемости. Эта особенность хороша вдвойне: код, который написан, компилировать не надо — вполне достаточно его запустить и получить результат. А еще есть возможность работать интерактивно, получая результат практически после каждой операции.

Как создать бесконечную последовательность

Рассмотрим, как можно с помощью генератора создать математическую последовательность, например, программу, генерирующую простые числа (напоминаем, это числа, не имеющие делителей, кроме 1).

Наша программа будет последовательно анализировать целые числа больше 1. Для каждого числа n программа ищет делители в диапазоне от 2 до √n. Если делители есть, программа переходит к следующему числу. Если их нет, значит, n — число простое, и программа выводит его на печать.

Этот код выдаёт бесконечную последовательность простых чисел без ограничения сверху. Остановить его можно только вручную.

Обучение Python с нуля

Начать обучение питону с нуля можно при помощи книг таких как «Программируем на Python» Майкла Доусона, «Изучаем Python» Марка Лутца и других. Но обычно книги используются как справочная информация или руководство по питону.


Книга «Программируем на Python» Майкла Доусона

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

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

Миф 1. Миф о мифах

Начнём с самых нелепых мифов — и это будут мифы о мифах. Почему-то авторы многих статей «N мифов о Python» наперебой твердят: «Python считают дорогим, но на самом деле это бесплатный язык», «На Python-программистов маленький спрос». Простите, но это какая-то коллективная галлюцинация. То ли вы опрашиваете людей, которые, кроме платного Бейсика, ничего не использовали, то ли опираетесь на исследования 91-го года, когда Python действительно не был так популярен.

Как можно считать непопулярной технологию, о которой пишут столько книг, статей, выпускают подкасты, проводят вебинары? Кажется, скоро даже в маршрутках и на рынках вместо «Чёрных глаз», Лободы и «Бутырки» будут играть аудиоуроки по Python.

Про дороговизну и вовсе забавно — авторы как мантру повторяют: «Нет, что вы, Python — бесплатный язык программирования». А кто-то может с ходу назвать платный язык? Они вообще существуют в природе? Ну да, бывают проприетарные компиляторы или среды разработки (IDE). Но вы когда-нибудь слышали жалобы вроде «Купил книгу по C++, и оказалось, что надо ещё заплатить за компилятор — иначе язык не выучишь»?

О языке

По-русски Python произносится как – «пайтон», но более распространенная версия произношения – «питон». Язык поддерживает несколько парадигм программирования: объектно-ориентированное, функциональное, структурное, императивное и аспектно-ориентированное.

Основная реализация языка Python — CPython. Написана на C

История

Разработку Python начал Гвидо ван Россум в декабре 1989 года. Для ОС Amoeba требовался расширяемый скриптовый язык. На досуге, Гвидо начал писать Python, позаимствовав некоторые наработки из языка ABC.

Версия Python 2.0 была выпущена 16 октября 2000 г., а первая обратно-несовместимая версия Python 3.0 – 3 декабря 2008 г.

Историю релизов Python можно посмотреть тут.

Какие задачи удобно решать на Python?

Основной упор в Python делается на скорости написания кода (а не на скорости выполнения кода, как например в языках С и C++). Поэтому в первую очередь Python удобно использовать там, где нужно быстро написать что-то работающее.

Все чаще Python используется для анализа данных, как в науке, так и коммерческой сфере. Этому способствует простота языка и большое разнообразие открытых библиотек.

Другая область применения, для которой хорош Питон – системное администрирование и DevOps. На это есть как минимум 3 причины:

  • благодаря своей простоте, системному администратору не так сложно выучить этот язык и начать им пользоваться;
  • огромный выбор библиотек;
  • python входит в состав большинства дистрибутивов Linux.

Типизация

Python является языком с полной динамической типизацией и автоматическим управлением памятью. Динамическая типизация означает, что тип переменной определяется только во время исполнения.

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

В «Питоне» реализованы встроенные типы, например:

  • булевый тип;
  • строка;
  • целое число произвольной точности;
  • число с плавающей запятой;
  • комплексное число.

Также есть и готовые коллекции:

  • списки;
  • кортежи (неизменяемые списки);
  • словари;
  • множества.

Добавить новый тип можно написав свой класс или определив новый тип в модуле расширения.

Производительность

По производительности Python относительно медленный язык (по сравнению с C, Go, Java). Его скорость выполнения схожа с другими интерпретируемыми языками (PHP, Ruby). Однако возможность компиляции python-кода в байт-код позволяет добиться большей производительности.

Основные причины, из-за которых Python «медленный»:

  • GIL (глобальная блокировка интерпретатора).
  • Динамическая типизации.
  • Python это интерпретируемый, а не компилируемый язык.

Несмотря на это, в большинстве задач гораздо важнее быстро получить результат, нежели ускорить выполнение программы

Особенно это важно для бизнеса или стартапа, где критически важно быстро выпустить продукт в production и начать зарабатывать

Если для задачи критична производительность, используйте последнюю версию Python. Или присмотритесь к PyPy

GIL

Global Interpreter Lock — это глобальная блокировка интерпретатора Python. GIL накладывает ограничение на потоки – нельзя использовать несколько процессоров одновременно. Тем самым GIL помогает избежать конфликтов при одновременном обращении разных потоков к одним и тем же участкам памяти.

Многие разработчики против GIL в Python-е, однако создатель проекта Гвидо ван Россум заявляет, что GIL не так уж и плох, и убирать его из CPython`а он не планирует.

Создание словаря

Пустой словарь можно создать при помощи функции или
пустой пары фигурных скобок (вот почему фигурные скобки
нельзя использовать для создания пустого множества). Для создания словаря
с некоторым набором начальных значений можно использовать следующие конструкции:

Capitals = {'Russia': 'Moscow', 'Ukraine': 'Kiev', 'USA': 'Washington'}
Capitals = dict(Russia = 'Moscow', Ukraine = 'Kiev', USA = 'Washington')
Capitals = dict()
Capitals = dict(zip(, ))
print(Capitals)

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

Минусы использования Python в веб-разработке

Несмотря на все преимущества,
перечисленные выше, Python имеет также
некоторые серьезные ограничения. Давайте
коротко по ним пройдемся.

  • Ограничения скорости. Поскольку Python это интерпретируемый язык программирования, программы на нем работают медленнее, чем написанные на компилируемых языках.
  • Проблемы с потоками. Global Interpreter Lock (GIL) допускает выполнение только одного потока в каждый отдельный момент. Это создает заметные ограничения для использования языка Python.
  • Простота. Хотя простота, на первый взгляд, это преимущество, она также является и недостатком. У программистов, привыкших к простому синтаксису, часто возникают трудности при переходе на более сложные языки, такие как Java.

Python или Golang — Что легче и быстрее выучить?

Знаете ли вы, что многие терпеть не могут Java, несмотря на его возможности? Все оттого, что Java сложен. Если речь заходит о сложных крупных программ, таким же становится и Python.

Golang является простым для понимания языком программирования с несложным синтаксисом. Хотя в Python также легкий синтаксис, Golang проще выучить и работать на нем. Golang основан на языке C, поэтому можно полагаться на его ясность.

Golang был создан для решения практических проблем Google, он более прагматичный. Вам не нужно фокусироваться на структуре языка, чтобы создавать классические сайты или приложения.