37

[Основы] Часть 1. Для грудничков.

Предполагается, что пост http://pikabu.ru/story/hello_world_4265035 уже прочитан или у вас любой дистрибутив linux.

Предполагается, что аудитория будет заинтересована, и если это будет так, я напишу ещё несколько постов о питоне, чтобы познакомиться с синтаксисом, стандартными структурами данных, некоторыми стандартными библиотеками, чтобы в дальнейшем перейти к разработке на Django.

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


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


Instagram - всеми любимый хостинг фотографий еды и ёбл тупых пёзд. Да, он написан на питоне. Мало того, за фреймворк взят Django, до которого мы доползём, если кроме меня будут желающие ползти. Да ещё и HTTP-сервер они взяли Gunicorn, до которого мы так же доползём. В качестве БД они используют PostgreSQL - мою любимую РСУБД и именно поэтому до неё мы тоже, возможно, доползём.


Reddit - сервис смехуёчков, думаю, все о нём так или иначе слышали. Он написан также на питоне, но на Pyramid фреймворке, а не Django. В качестве БД используются две базы: Cassandra и PostgreSQL. В качестве кэша используется memcached и фейсбуковский mcrouter. В качестве брокера сообщений используется RabbitMQ. Исходный код находится в общем доступе здесь https://github.com/reddit/reddit


exchange.livejournal.com - биржа блогеров ЖЖ, которая недавно открылась. Почему она здесь? Потому что я участвовал в её разработке. Она также написана на Django с базой PostgreSQL.


На этом замануха кончается и начинается моя нелюбимая часть - циклы, ветвления и переменные.

Все куски кода будут являть собой скриншоты Jupyter Notebook, во-первых, потому что мне в нём удобно писать, во-вторых, потому что нечего копировать чужой код.


Переменные

Питон - язык со строгой динамической типизацией. Что это значит?

- Если захочешь сложить число 5 со строкой '7' - тебя наругают. Это называется строгой типизацией. Никаких преведений к "более общему" типу.

- Если в переменной x хранилось число, это не значит, что ей нельзя присвоить строку. Это динамическая типизация. Тип переменной, разумеется, нигде указывать не нужно.

Приятной возможностью является параллельное присваивание. Обмен значениями также поддерживается.

Есть также множественное присваивание, которое я настоятельно не рекомендую использовать бездумно (это касается неплоских типов данных, о которых поговорим как-нибудь позже):

С переменными, вроде, пока всё.


Ветвления

В отличии от Си-подобного синтаксиса, у нас нет ни фигурных скобок для выделения блоков, ни скобок для выделения условного выражения (на самом деле, ничего не мешает обернуть условие в скобки). Блоки выделяются ТОЛЬКО отступами. Здесь нет никаких switch, есть только if, elif и else. Следующий пример, думаю, объяснит всё за меня:

А теперь небольшой сюрприз. Несмотря на то, что язык имеет строгую типизацию, сравнения между некоторыми неодинаковыми типами данных (int, float, Decimal) поддерживаются. Например 5 == 5.0 вернёт True, несмотря на то, что 5 - это целое число, а 5.0 - с запятой. Но использование этого считается дурным тоном.


Циклы

Если вы до этого дня не знали слово "итератор" и писали только циклы по индексам, вроде такого for(int i=0; i<10; i++), то придётся привыкать.

Итак, в питоне цикл for проходит итератором по каждому элементу последовательности. Ему глубоко плевать, что внутри последовательности. Число, строка, чьи-то надежды и мечты.

Для обычных циклов по индексам существует генератор range. О генераторах тоже позже.


Функции

Функции в питоне объявляются двумя способами:

Однако, второй способ СТРОГО НАСТРОГО рекомендую использовать для определения обычных функций. Лямбда-функции (или безымянные функции) нужны только для того, чтобы передавать их аргументом в функции высшего порядка.

Тут, наверное, возникло сразу два вопроса:

Как можно передать функцию аргументом в другую функцию?

Что такое функция высшего порядка?


Т.к. питон - объектно-ориентированный, следовательно, всё в нём является объектом. И функция тоже. Аргументом в функцию может прийти любой объект, в т.ч. и функция:

В данном примере много чего интересного:

1) После определения функции (def) можно ввести так называемый docstring, который описывает то, что делает функция. При этом, этот докстринг сохраняется в атрибут __doc__ объекта функции (что только лишний раз говорит о том, что функция - объект)

2) __name__ атрибут содержит имя объекта (функции или класса)

3) h в этом случае - функция высшего порядка. Функция высшего порядка - это функция, которая принимает или возвращает другую функцию. Это пригодится для декораторов, о которых также позже.


Функции можно присваивать другим переменным:

Но имя (__name__) останется прежним, т.к. фактически, f и same_func только лишь ссылаются на функцию.

Чёт, кажется, я уже далеко забрёл. В следующей части, если увижу интерес у аудитории, я расскажу о стандартных структурах данных (списки, кортежи, словари, множества) и о том, какие они охуенные и для чего используются.


P.S. Пост писался без подготовки, прямо в редактор постов на пикабу, обо всех недочётах пишите в комментах, закидывайте тапками и помидорами.

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу

2
Автор поста оценил этот комментарий

Вот все говорят - кино для дураков, кино для дураков... А мне нравится! (с)

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

Продолжайте!

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Я уже планировал всё оставить. Но раз нашёлся человек, которому нравится)

показать ответы
3
Автор поста оценил этот комментарий

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

если мат не помогает легче передать информацию - он не нужен в такого рода постах.

это не прямолинейность, а неэтичность.

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

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

3
Автор поста оценил этот комментарий

подача слишком рваная, несмотря на верные вещи.


начинать учить с django - тоже сомнительно.

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

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Идти в IDE с места в карьер? Не слишком ли много нового? Новички всё равно будут использовать её лишь как текстовый редактор.

показать ответы
4
Автор поста оценил этот комментарий

На самом деле, пост спорный.

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

PS. Тема [Python] слишком общая, лучше изменить на [Основы]. И лучше добавить больше информативных тегов, типа: ветвления, циклы, функции.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Мат является неотъемлемой частью русской жизни, духа и программирования. Замалчивание мата является лицемерием. Я прямолинеен. Согласен, в сообществе Python глупо ставить в название [Python]. Но редактировать пост до публикации оказалось нельзя.

показать ответы
0
Автор поста оценил этот комментарий

отличия CE и Pro для новичков?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Угу. Например, CE не поддерживает шаблонизатор Django, нет автодобавления на |> runserver'а, нет удобной консоли management команд, нет адаптера для БД. И придётся юзать CE реально как текстовик.

показать ответы
0
Автор поста оценил этот комментарий

ты просто высасываешь аргумент из пальца :)

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Нет, просто мне лень качать и ставить PyCharm CE, а отличия с прошкой большие)

показать ответы
1
Автор поста оценил этот комментарий

новичку? экстренно?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Новичок всегда будет новичком?

показать ответы
0
Автор поста оценил этот комментарий

и всё равно. какие практические минусы? что ты не сможешь код на бумажке написать? ты же не от балды берёшь.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Например, если экстренно нужно править код, а у тебя нет под рукой IDE.

показать ответы
1
Автор поста оценил этот комментарий

сколько ни пытался придумать минусы автодоплнения - не придумал.

ты запоминаешь названия, иначе не выбрал бы их по автодополнению)

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Например, запомнить permutations гораздо сложнее, чем написать per<Enter>

показать ответы
2
Автор поста оценил этот комментарий

ну, я до пайтона знал только VBA, разве был не новичок?

мне надо было, я поставил pycharm, pyqt и пошёл учить/использовать.

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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Около сотни хоткеев - это для новичков?)

Автодополнение вызывает побочный эффект - ты перестаёшь помнить имена классов/методов, только и клацая по Enter, набрав пару-тройку первых символов.

показать ответы