Как сказал один из пользователей StackOverflow, «using SO is like doing lookups with a hashtable instead of a linked list». Мы снова обращаемся к этому замечательному ресурсу, на котором попадаются чрезвычайно подробные и понятные ответы на самые различные вопросы.
В этот раз мы обсудим, что такое метаклассы, как, где и зачем их использовать, а также почему обычно этого делать не стоит.
На 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/
16 июня 1911 года в США была основана компания Computing Tabulating Recording, включившая в себя Computing Scale Company of America, Tabulating Machine Company и International Time Recording Company, а с 1914 года она известна как International Business Machines или, сокращённо, IBM.
Без преувеличения можно сказать, что компания IBM очень сильно повлияла на мир, в котором мы с вами сегодня живём. Посудите сами: жёсткие диски, Фортран, DRAM, дискеты, SQL (и вообще концепция реляционной базы данных), штрих-коды — всё это появилось в стенах IBM. Кроме того, сотрудниками IBM была открыта высокотемпературная сверхпроводимость и изобретён сканирующий туннельный микроскоп, за что в 1987 и 1986 годах соответственно были получены Нобелевские премии по физике. Бенуа Мандельброт написал свою знаменитую статью о фракталах для журнала Science тоже будучи сотрудником IBM.
Deep Blue, наконец — ещё один важный шаг в развитии компьютерной техники.
Хорошая компания, что и говорить. Желаем ей дальнейших успехов и процветания.
Ситуация: человек читает хабр не очень давно (как я, например) и натыкается на блог по интересующей его тематике. Но в этом блоге оказывается довольно большое количество топиков (в «Я умный» их 2355, поди найди ещё действительно хорошие!), и человек несколько теряется.
Предложение: добавить кнопку «Отсортировать по рейтингу». Нажал — и вот тебе лучшее в данном блоге. Для новоприбывших и просто желающих почитать было бы очень полезно, я думаю.