kitaetz

Пикабушник
поставил 1544 плюса и 1003 минуса
отредактировал 0 постов
проголосовал за 0 редактирований
Награды:
10 лет на Пикабу
15К рейтинг 11 подписчиков 30 подписок 12 постов 2 в горячем

[Основы] Часть 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 хранилось число, это не значит, что ей нельзя присвоить строку. Это динамическая типизация. Тип переменной, разумеется, нигде указывать не нужно.

[Основы] Часть 1. Для грудничков. Python, Программирование, Python3, Длиннопост, Цикл, Ветвления, Основы, Переменные

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

[Основы] Часть 1. Для грудничков. Python, Программирование, Python3, Длиннопост, Цикл, Ветвления, Основы, Переменные

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

[Основы] Часть 1. Для грудничков. Python, Программирование, Python3, Длиннопост, Цикл, Ветвления, Основы, Переменные

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


Ветвления

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

[Основы] Часть 1. Для грудничков. Python, Программирование, Python3, Длиннопост, Цикл, Ветвления, Основы, Переменные

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


Циклы

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

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

[Основы] Часть 1. Для грудничков. Python, Программирование, Python3, Длиннопост, Цикл, Ветвления, Основы, Переменные

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


Функции

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

[Основы] Часть 1. Для грудничков. Python, Программирование, Python3, Длиннопост, Цикл, Ветвления, Основы, Переменные

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

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

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

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


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

[Основы] Часть 1. Для грудничков. Python, Программирование, Python3, Длиннопост, Цикл, Ветвления, Основы, Переменные

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

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

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

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


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

[Основы] Часть 1. Для грудничков. Python, Программирование, Python3, Длиннопост, Цикл, Ветвления, Основы, Переменные

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

[Основы] Часть 1. Для грудничков. Python, Программирование, Python3, Длиннопост, Цикл, Ветвления, Основы, Переменные

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


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

Показать полностью 9

Когда ты очень асоциальная личность

Когда ты очень асоциальная личность Бан-лист, Баг, Пикабу
Показать полностью 1

Кажется, неделя идей для стартапов?

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

Идея в том, чтобы создать формат и прочие принадлежности (кодек), например, .pv (Pron Video), который будет весить в разы меньше других форматов при должной однообразности сцен.
Только представьте: смотреть FullHD ролики на узкополосном интернете!

Ты кто такой?

Звонок вчера вечером (Н - Незнакомец):
Я: Алло.
Н: Здарова. Кто это?
Я: А тебе кого нужно?
Н: Китайца нужно.
Я: Это я, говори.
Н: Блядь, опять ты. *вешает трубку*

Кавказ - сила

с точки зрения физики.
Кавказ - сила с точки зрения физики.
Показать полностью 1

Композиция "Плач перфекциониста"

или "свой среди чужих"
Композиция &quot;Плач перфекциониста&quot; или "свой среди чужих"

Дом - женское счастье

Дом - женское счастье

Маленький альтруист - большая проблема

Маленький альтруист - большая проблема
Показать полностью 1
Отличная работа, все прочитано!