Pull to refresh
0
0
Send message

Как работает yield

Reading time6 min
Views664K
На StackOverflow часто задают вопросы, подробно освещённые в документации. Ценность их в том, что на некоторые из них кто-нибудь даёт ответ, обладающий гораздо большей степенью ясности и наглядности, чем может себе позволить документация. Этот — один из них.

Вот исходный вопрос:
Как используется ключевое слово yield в Python? Что оно делает?

Например, я пытаюсь понять этот код (**):
def _get_child_candidates(self, distance, min_dist, max_dist):
    if self._leftchild and distance - max_dist < self._median:
        yield self._leftchild
    if self._rightchild and distance + max_dist >= self._median:
        yield self._rightchild

Вызывается он так:
result, candidates = list(), [self]
while candidates:
    node = candidates.pop()
    distance = node._get_dist(obj)
    if distance <= max_dist and distance >= min_dist:
        result.extend(node._values)
        candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
        return result


Что происходит при вызове метода _get_child_candidates? Возвращается список, какой-то элемент? Вызывается ли он снова? Когда последующие вызовы прекращаются?

** Код принадлежит Jochen Schulz (jrschulz), который написал отличную Python-библиотеку для метрических пространств. Вот ссылка на исходники: http://well-adjusted.de/~jrschulz/mspace/

Подробный и обстоятельный ответ
Total votes 141: ↑136 and ↓5+131
Comments41

Объяснение SNARKs. Знание о принятом коэффициенте и достоверное слепое вычисление полиномов (перевод)

Reading time6 min
Views3.3K
Привет, Хабр! Представляю вашему вниманию перевод статей блога ZCash, в которых рассказывается о механизме работы системы доказательств с нулевым разглашением SNARKs, применяемых в криптовалюте ZCash (и не только).

Предыдущая статья: Объяснение SNARKs. Гомоморфное скрытие и слепое вычисление полиномов (перевод)

В этой статье мы рассмотрим тест на принятый коэффициент и слепое вычисление полиномов, поддающихся проверке. Поехали…
Читать дальше →
Total votes 16: ↑16 and ↓0+16
Comments3

Шпаргалка по работе с Tmux (терминальный мультиплексор)

Reading time2 min
Views442K

На Хабрахабре Tmux (ти-макс) упоминался неоднократно, тем не менее, решил написать еще одну шпаргалку, т.к. в других некоторые важные моменты не показаны.

Tmux (терминальный мультиплексор) позволяет работать с несколькими сессиями в 1 окне. Вместо нескольких окон терминала к серверу — вы можете использовать одно. Позволяет подключаться/отключаться к текущему состоянию сессии. Запущенные программы и процессы продолжают работать. (Можно использовать вместо nohup, dtach).

Например, на работе правим файлы в Vim. Окно терминала с открытыми файлами, процессами. Отключаемся от сессии. Далее подключаемся к этой сессии из дома и получаем те же окна с открытыми файлами в Vim, процессами и т.д. Можно продолжить работу с того же момента, на котором остановились. Также удобно при разрыве связи. Дополнительно можно работать совместно с другими в терминале, если подключены к одной сессии. Каждый видит, что делает другой.
Читать дальше →
Total votes 28: ↑17 and ↓11+6
Comments20

LVM — это просто!

Reading time4 min
Views612K
Собственно, хочется просто и доступно рассказать про такую замечательную вещь как Logical Volume Management или Управление Логическими Томами.
Поскольку уже давно пользуюсь LVM-ом, расскажу что он значит именно для меня, не подглядывая в мануалы и не выдёргивая цитаты из wiki, своими словами, чтобы было понятно именно тем кто ничего о нем не знает. Постараюсь сразу не рассказывать о всяческих «продвинутых» функциях типа страйпов, снапшотов и т.п.
Читать дальше →
Total votes 58: ↑54 and ↓4+50
Comments75

Yum, шпаргалка

Reading time4 min
Views741K


Шпаргалка по работе с пакетным менеджером Yum (Yellowdog Updater, Modified), который используется в популярных Linux дистрибутивах: RedHat, CentOS, Scientific Linux (и других). В целях экономии места вывод команд не представлен.

Оглавление


Команды
Опции Yum
Пакет Yum-Utils
Конфигурационные файлы
Плагины
Работа через прокси
Читать дальше →
Total votes 30: ↑25 and ↓5+20
Comments20

Как работает реляционная БД

Reading time51 min
Views534K
Реляционные базы данных (РБД) используются повсюду. Они бывают самых разных видов, от маленьких и полезных SQLite до мощных Teradata. Но в то же время существует очень немного статей, объясняющих принцип действия и устройство реляционных баз данных. Да и те, что есть — довольно поверхностные, без особых подробностей. Зато по более «модным» направлениям (большие данные, NoSQL или JS) написано гораздо больше статей, причём куда более глубоких. Вероятно, такая ситуация сложилась из-за того, что реляционные БД — вещь «старая» и слишком скучная, чтобы разбирать её вне университетских программ, исследовательских работ и книг.

На самом деле, мало кто действительно понимает, как работают реляционные БД. А многие разработчики очень не любят, когда они чего-то не понимают. Если реляционные БД используют порядка 40 лет, значит тому есть причина. РБД — штука очень интересная, поскольку в ее основе лежат полезные и широко используемые понятия. Если вы хотели бы разобраться в том, как работают РБД, то эта статья для вас.
Читать дальше →
Total votes 232: ↑229 and ↓3+226
Comments134

Python: коллекции, часть 4/4: Все о выражениях-генераторах, генераторах списков, множеств и словарей

Reading time17 min
Views180K
Часть 1 Часть 2 Часть 3 Часть 4
imageЗаключительная часть моего цикла, посещенного работе с коллекциями. Данная статья самостоятельная, может изучаться и без предварительного изучения предыдущих.

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

imageБудут рассмотрены: выражения-генераторы, генераторы списка, словаря и множества, вложенные генераторы (5 вариантов), работа с enumerate(), range().
А также: классификация и терминология, синтаксис, аналоги в виде циклов и примеры применения.

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

Оглавление:


1. Определения и классификация.
2. Синтаксис.
3. Аналоги в виде цикла for и в виде функций.
4. Выражения-генераторы.
5. Генерация стандартных коллекций.
6. Периодичность и частичный перебор.
7. Вложенные циклы и генераторы.
8. Использование range().
9. Приложение 1. Дополнительные примеры.
10. Приложение 2. Ссылки по теме.
Изучаем детали, иллюстрации и примеры
Total votes 22: ↑21 and ↓1+20
Comments45

Лабораторная работа «Обучаемся настраивать сети в GNU/Linux»

Reading time9 min
Views45K
Никто не любит длинные вступления, поэтому сразу к сути.
В данной импровизированной лаборатории я хотел бы осветить работу с сетями в GNU/Linux
и рассмотреть следующие темы:

  1. Изучаем vlan. Строим сеть между vm1, vm2 в одном vlan. Пингуем, ловим пакеты, изучаем заголовки.
  2. Разбиваем vm1 vm2 на разные vlan. Настраиваем intervlan routing с помощью R1.
  3. Iptables. Настраиваем маскарад. Имитируем выход во внешние сети.
  4. Iptables. Настраиваем port forwarding для сервисов на vm1 и v2, которые находятся за NAT.
  5. Iptables. Настраиваем security zones. Изучаем tcp сессии.


З.Ы. все люди ошибаются, я открыт для ваших комментариев, если я написал какую-то глупость, готов ее исправить!
Читать дальше →
Total votes 18: ↑17 and ↓1+16
Comments24

Первые несколько миллисекунд HTTPS соединения

Reading time10 min
Views167K
После нескольких часов чтения обзоров, Боб с нетерпением нажал на кнопку перехода к оформлению заказа на галлон цельного молока, и…
Воу, что только что произошло?


Интересно? Прошу под кат
Total votes 242: ↑237 and ↓5+232
Comments36

Команда dd и все, что с ней связано

Reading time4 min
Views600K

В UNIX системах есть одна очень древняя команда, которая называется dd. Она предназначена для того, чтобы что-то куда-то копировать побайтово. На первый взгляд — ничего выдающегося, но если рассмотреть все возможности этого универсального инструмента, то можно выполнять довольно сложные операции без привлечения дополнительного ПО, например: выполнять резервную копию MBR, создавать дампы данных с различных накопителей, зеркалировать носители информации, восстанавливать из резервной копии данные на носители и многое другое, а, при совмещении возможностей dd и поддержке криптографических алгоритмов ядра Linux, можно даже создавать зашифрованные файлы, содержащие в себе целую файловую систему.
Опять же, в заметке я опишу самые часто используемые примеры использования команды, которые очень облегчают работу в UNIX системах.
Читать дальше →
Total votes 323: ↑315 and ↓8+307
Comments119

Горячие клавиши в шелле

Reading time3 min
Views113K
Посвящается B_dot, пост которого заставил заинтересоваться возможностями консоли плотнее.
cat /dev/cheat-sheet >> /dev/head

Краткое вступление


В этом посте будет рассказано о некоторых сочетания клавиш, которые могут упросить жизнь администраторам, работающим в консоли. Все они работают в bash'e. Сочетания клавиш я дополнительно проверял на циске (Cisco IOS Software, s72033_rp Software (s72033_rp-ADVIPSERVICESK9_WAN-M), Version 12.2(33)SXH4), csh и zsh. Рассмотренное в других записях повторять особо не буду. Сочетания сгруппированы по использованной функциональной клавише.
Особенно полезен этот текст будет людям, которые любят использовать клавиши Home, End и Delete (которые в цисковой консоли «не работают»).
Читать дальше →
Total votes 150: ↑145 and ↓5+140
Comments59

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

Reading time3 min
Views125K
"The joy of coding Python should be in seeing short, concise, readable classes that express a lot of action in a small amount of clear code — not in reams of trivial code that bores the reader to death."
Guido van Rossum

Python — язык программирования, на котором приятно писать и который приятно читать. Мы предлагаем тринадцать лекций осеннего курса CS центра, чтобы посмотреть вглубь языка и попробовать понять, как пользоваться всеми его возможностями. Лекции читает Сергей Лебедев, разработчик в компании JetBrains и преподаватель в Computer Science Center.

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

Фотография сделана осенью 2014 года в Страсбурге, за две недели до начала первого прочтения этого курса.
Открыть лекции курса
Total votes 45: ↑42 and ↓3+39
Comments32

Ежедневная работа с Git

Reading time40 min
Views875K
Я совсем не долго изучаю и использую git практически везде, где только можно. Однако, за это время я успел многому научиться и хочу поделиться своим опытом с сообществом.

Я постараюсь донести основные идеи, показать как эта VCS помогает разрабатывать проект. Надеюсь, что после прочтения вы сможете ответить на вопросы:
  • можно ли git «подстроить» под тот процесс разработки, который мне нужен?
  • будет ли менеджер и заказчик удовлетворён этим процессом?
  • будет ли легко работать разработчикам?
  • смогут ли новички быстро включиться в процесс?
  • можно ли процесс относительно легко и быстро изменить?


Конечно, я попытаюсь рассказать обо всём по-порядку, начиная с основ. Поэтому, эта статья будет крайне полезна тем, кто только начинает или хочет разобраться с git. Более опытные читатели, возможно, найдут для себя что-то новое, укажут на ошибки или поделятся советом.

Далее очень много букв случайным образом превратились в пост.
Total votes 200: ↑194 and ↓6+188
Comments44

Юникод для чайников

Reading time8 min
Views326K
logo
Сам я не очень люблю заголовки вроде «Покемоны в собственном соку для чайников\кастрюль\сковородок», но это кажется именно тот случай — говорить будем о базовых вещах, работа с которыми довольно часто приводить к купе набитых шишек и уйме потерянного времени вокруг вопроса — «Почему же оно не работает?». Если вы до сих пор боитесь и\или не понимаете Юникода — прошу под кат.

Читать дальше →
Total votes 121: ↑115 and ↓6+109
Comments53

Кош на комплексной плоскости

Reading time6 min
Views65K
В какой-то из весенних дней этого года я ехал в троллейбусе и листал комикс о Коше. В одном из выпусков была такая фраза «НО! Её можно понять, она же фракталами в горизонт перетекает, я бы тоже замешкался...». После этого я посмотрел в окно и понял, что если мы возьмём два подходящих дробно-линейных преобразования комплексной плоскости a(z) и b(z), и рассмотрим систему итерированных функций для a(z), b(z), a−1(z), b−1(z), взяв в качестве начального множества картинку с Кошем, то Кош будет перетекать фракталами в горизонт!

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

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



Читать дальше →
Total votes 214: ↑206 and ↓8+198
Comments26

Проектирование RESTful API с помощью Python и Flask

Reading time15 min
Views274K
В последние годы REST (REpresentational State Transfer) стала стандартной архитектурой при дизайне веб-сервисов и веб-API.

В этой статье я покажу вам как просто создавать RESTful веб-сервисы используя Python и микрофреймворк Flask.

Что такое REST?


Характеристика системы REST определяется шестью правилами дизайна:

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

Читать дальше →
Total votes 40: ↑33 and ↓7+26
Comments32

Мега-Учебник Flask, Часть 1: «Привет, Мир!»

Reading time6 min
Views572K
Это первая статья в серии, где я буду документировать мой опыт написания веб-приложения на Python, используя микрофреймворк Flask.

Здесь список всех статей в серии:
Часть 1: Привет, Мир!
Часть 2: Шаблоны
Часть 3: Формы
Часть 4: База данных
Часть 5: Вход пользователей
Часть 6: Страница профиля и аватары
Часть 7: Unit-тестирование
Часть 8: Подписчики, контакты и друзья
Часть 9: Пагинация
Часть 10: Полнотекстовый поиск
Часть 11: Поддержка e-mail
Часть 12: Реконструкция
Часть 13: Дата и время
Часть 14: I18n and L10n
Часть 15: Ajax
Часть 16: Отладка, тестирование и профилирование
Часть 17: Развертывание на Linux (даже на Raspberry Pi!)
Часть 18: Развертывание на Heroku Cloud

Моя предыстория


Я разработчик ПО с двузначным числом лет опыта разработки комплексных приложений на нескольких языках. Впервые я познакомился с Python для создания привязок к C++ библиотеке на работе. Вдобавок к Python, я писал веб-приложения на PHP, Ruby, Smalltalk и, верите вы или нет, еще на С++. Из всего этого, я нахожу комбинацию Python/Flask самой гибкой.
Я хочу начать это долгое и удивительное путешествие
Total votes 63: ↑60 and ↓3+57
Comments31

Information

Rating
Does not participate
Registered
Activity