Единственное, где мы действительно можем делать выбор — это в своём сердце…

царь СоломонОднажды некто пришёл к Соломону и сказал ему:
— Царь, помоги мне! Каждый раз, когда мне приходится делать выбор, я не могу спокойно спать — мечусь и страдаю, и раздумываю, то ли я сделал, что должно. Что мне делать?
И ответил мудрый царь:
Выбора не существует.
И ещё спросил он:
— Ты бы бросился в реку, увидев тонущего ребенка?
Читать

python copy/deepcopy

Всем привет!

Продолжаем ломать копья об питоновскую парадигму изменяемых/неизменяемых объектов.
Разберем поверхностное и глубокое копирование словаря.

>>>s = {«str»: «1», «list»: [1, 2], «dict»: {«first»: «test1»}}
>>>f = s
>>>f['second'] = '2'

>>>print s

Надеюсь понятно какой вывод будет в консоли. Если нет, то смотрим ссылки.
Для того чтобы не ссылаться на один объект, нужно скопировать словарь s.

Но метод copy обладает неприятной особенностью, он поверхностно копирует словарь.
Смотрим на пример (s из предыдущего примера).

>>>f = s.copy()
>>>f['second'] = '3'
>>>f['dict']['third'] = '3'
>>>print s

{'dict': {'third': '3', 'first': 'test1'}, 'list': [1, 2], 'str': '1'}

Проблема решается использованием модуля copy.

>>>import copy

>>>f = copy.deepcopy(s)
>>>f['second'] = '3'
>>>f['dict']['third'] = '3'
>>>print s

>>>print f

Как работает copy.deepcopy

Начнем с аргументов

deepcopy(x, memo=None, _nil=[])

x — копируемый объект. Копируемым объектом может быть любой стандартный тип данных, а также кастомных объектов.
memo — словарь, в котором будут сопоставлены id созданных объектов и их значения. По-умолчанию None(если не понятно почему, то смотрим в ссылки [3]). При желании можно реализовать собственный «копир», если есть потребность в специфичном поведении копирования.
_nil — вспомогательный атрибут, используемый во время копирования

Пара примеров для понимания работы deepcopy

>>>s = {«i»: 1, «s»: «2», «l»: [1, 2, 3]}
>>>memo = {}
>>>d = copy.deepcopy(s, memo)

>>>print id(s)
44501728

>>>print id(d)
44502304

>>>print d
{'i': 1, 's': '2', 'l': [1, 2, 3]}

>>>print id(memo)
44502016

>>>print memo

{44501728: {'i': 1, 's': '2', 'l': [1, 2, 3]}, 31711104: '2', 31565540: 2, 44502016: [1, 'i', '2', 's', 2, 3, [1, 2, 3], 'l', {'i': 1, 's': '2', 'l': [1, 2, 3]}], 31266408: 'i', 31565552: 1, 31565528: 3, 31268304: 's', 31708488: 'l', 44497976: [1, 2, 3]}

Словарь memo хранит id всех копируемых объектов, их значения., а также свой id.

>>>dt = copy.deepcopy(s, memo)

>>>print id(dt)
44502304

print dt
{'i': 1, 's': '2', 'l': [1, 2, 3]}

Как видим, deepcopy возвращает уже копировавшийся объект d

>>>s1 = {«i»: 1, «s»: «2», «l»: [1, 2, 3]}
>>>dth = copy.deepcopy(s1, memo)
>>>print id(s1)
44516240

>>>print(id(dth))
44517248

>>>print(dth)
{'i': 1, 's': '2', 'l': [1, 2, 3]}

>>>print(id(memo))
44502016

>>>print(memo)
{44501728: {'i': 1, s': '2', 'l': [1, 2, 3]}, 31711104: '2', 44516240: {'i': 1,  's': '2', 'l': [1, 2, 3]}, 31565540: 2, 44502016: [1, 'i', '2', 's', 2, 3, [1, 2, 3], 'l', {'i': 1, 's': '2', 'l': [1, 2, 3]}, [1, 2, 3], {'i': 1, 's': '2', 'l': [1, 2, 3]}], 31266408: 'i', 31565552: 1, 31565528: 3, 44498856: [1, 2, 3], 31268304: 's', 31708488: 'l', 44497976: [1, 2, 3]}

Реализация deepcopy

Сначала происходит инициализация memo, если словарь не задан. Если memo задан тогда проверяется наличие id копируемого объекта, если такой объект уже есть в memo, то происходит его возврат.

d = id(x)
y = memo.get(d, _nil)
if y is not _nil:
    return y

Т.е. если после копирования нужно все время получать новый объект, то тогда поле memo нужно оставлять по-умолчанию (это мы видели на примере выше).

Далее определяется тип копируемого объекта и если он есть в описании стандартных типов, то вызывается функция копирования

copier = _deepcopy_dispatch.get(cls)
if copier:
    y = copier(x, memo)

Например, для словаря вызывается _deepcopy_dict

def _deepcopy_dict(x, memo):
    y = {}
    memo[id(x)] = y
    for key, value in x.iteritems():
        y[deepcopy(key, memo)] = deepcopy(value, memo)
    return y

Код довольно простой, создается новый словарь, в цикле копируются значения. Обратите внимание копирование идет — рекурсивным вызовом deepcopy, сделано это на случай того, если словарь составной и содержит вложенные объекты.
После успешного копирования обновляется словарь memo и вызывается функция _keep_alive, которая записывает в memo, сам копируемый объект, т.е. если вызвать memo[id(memo)], то получим список всех объектов, которые копировались.

Ссылки
[1]https://docs.python.org/2/library/stdtypes.html#dict.copy
[2]https://docs.python.org/2/library/copy.html
[3]http://evgenqa.blogspot.ru/2014/05/blog-post_23.html

Автор: Евгений Курочкин

бумажный лотос

Мастер-клаcc «Мощные практики в Новолуние для наполнения энергией, привлечения Любви, Изобилия и Исполнения желаний»

НоволуниеСкоро наступит Новолуние и мы  приглашаем Вас  27 июня в 15-00 МСК и 20-00 МСК

(будет проводиться днем и вечером для вашего удобства)

на практический мастер-класс к Новолунию:

«Мощные практики в Новолуние

для наполнения энергией, привлечения Любви, Изобилия и Исполнения желаний»

Программа и Запись на участие здесь!

Читать

Профилактика ухудшения зрения

Многие люди, почувствовав, что у них начинает портиться зрение, списывают это на возраст и считают, что сами могут выбрать для себя очки или линзы. Между тем, самостоятельный выбор очков или линз может привести к осложнениям и дальнейшему ухудшению зрения. Только врач может определить, в чём причина падения зрения. Он же может назначить методы лечения и профилактики. Дело в том, что глаза, как, впрочем, и другие наши органы, нуждаются в подпитке определёнными витаминами и минералами. Достаточно часто увлечение разнообразными монодиетами негативно сказывается именно на зрении. Для поддержания зрения глазам нужны калий, железо, фосфор, кремний, витамины А, В и Е. Соответственно, включение в рацион продуктов, которые содержат достаточное количество этих витаминов и микроэлементов, в значительной мере поможет сберечь здоровье ваших глаз. Никакие синтетические лекарства не сравнятся с пользой овощей и фруктов, содержащих бета-каротин и кремний: моркови, черники, абрикосов, болгарского перца. Богатейшим источником витамина С в сочетании с кремнием является обычная белокочанная капуста. Проведённые учёными исследования показали, что серьёзные проблемы со зрением могут быть у детей, матери которых во время беременности отказывались от сливочного масла – продукта, чрезвычайно богатого витамином А. Красная рыба, яичные желтки и говяжья печень содержат витамин В12, необходимый для формирования стенок глазных сосудов. Пророщенные злаки, в особенности пшеница и овёс – просто кладезь микроэлементов и витаминов, особенно калия и витамина В. Поэтому нужно стараться чтобы ваше питание было разнообразным и полезным. Очень важна для поддержки зрения и глазная гимнастика. К примеру, известная методика, разработанная профессором В.Г.Ждановым, является прекрасным средством профилактики заболеваний зрения. Современная медицина широко применяет различные корректирующие приспособления: очки и контактные линзы, — позволяющие не только остановить процесс падения, но и улучшить зрение. Современные контактные линзы сконструированы так, что позволяют повышать работоспособность глаза, а также восстанавливать зрительную функцию. Однако отправляться в магазин линз нужно исключительно с рецептом от врача: только врач может подобрать контактные линзы так, чтобы они полностью соответствовали физиологическим особенностям глаз пациента. Таким образом, только комплексный подход к профилактическим и лечебным мероприятием, а также следование рекомендациям врача позволит остановить ухудшение зрения.

serchcode

Для тех кто в танке и не читает хабр прикольный поисковик по коду опен сорс https://searchcode.com/


Нашел 193 результата по запросу putIn и 760 по medveDev.

Автор: Евгений Курочкин

Плагин Subscribe to Comments Reloaded — настройка подписки на комментарии

Доброго времени суток, уважаемые читатели! Практически с момента создания моего блога на нем был установлен плагин Subscribe To Comments, благодаря которому читатели блога могли подписать на получение уведомлений о новых комментариях к статье, которую они прокомментировали. Недавно вышел новый плагин Subscribe to Comments Reloaded. О его настройке и пойдет речь в этой статье.

Отдельной статьи, посвященной установке данного плагина я не писала, а лишь упоминала о нем в посте со списком используемых мною плагинов. Да собственно, там и писать было не о чем. Установили плагин и строчка с предложением подписаться на уведомления о новых комментариях автоматически появлялась под кнопкой «Оставить комментарий».

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

Плагин Subscribe to Comments Reloaded получил более продвинутый функционал. Итак, что нового в этом плагине:

  1. Панель настроек плагина полностью на русском языке.
  2. Расширенный функционал для полного управления подписками к любой статье Вашего блога.
  3. Редактирование сообщений, которые получают подписчики и формы подписки.
  4. Много других настроек. Читайте ниже.

Если у Вас стоит плагин Subscribe To Comments, то после установки нового плагина, старые подписчики никуда не пропадут. Вы просто устанавливаете и активируете новый плагин, а старый деактивируете.

Как установить плагин Subscribe to Comments Reloaded я не буду рассказывать. Посмотрите статью «Как установить плагин» и следуйте инструкциям в ней.

Настройка плагина Subscribe to Comments Reloaded

Давайте лучше рассмотрим все настройки плагина. Чтобы попасть на страницу настроек, перейдите в меню слева в пункт «Настройки» — «Subscribe to Comments».

  • Редактировать подписки — первая вкладка, которую мы видим, перейдя на страницу настроек. Вот так она выглядит:

Настройки subscribe to comments

Здесь Вы можете обновить подписки, добавить подписку любому имейл адресу, удалить или редактировать подписки уже подписанных людей. Неудобно, что на странице выводится всего по 25 подписчиков. Если их много, то листать придется долго. Для поиска подписчика по известному имейлу, введите его имейл. Также можно посмотреть кто подписан на ту или иную статью, введя в строку поиска ID-номер записи. Одно из главных отличий этой версии плагина от предыдущей — возможность выбора для подписчика на какие комментарии ему подписываться. Если раньше, пользователь подписывался на уведомления о всех комментариях к статье, то теперь он может настроить получение уведомлений только на ответы к его комментарию. А Вы можете изменить его подписку на этой странице.

  • Форма комментария

Параметры subscribe to comments reloaded

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

По желанию Вы можете изменить сообщения, которые показываются вашим посетителям под формой комментариев.

  • Страница управления

Настройки подписки в subscribe to comments

Тут Вы можете настроить страницу управлению подпиской и тексты, которые видят посетители. Меня все устраивает, я оставила все как было.

  • Уведомления

Подписка на комментарии в wordpress

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

  • Параметры

Плагин подписки на комментарии wordpress

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

Внимание! Плагин Subscribe to Comments Reloaded создает дубли!

В выдаче Гугла появляются страницы с вот такими адресами:

  • https://inetsovety.ru/comment-subscriptions/?srp=4020&sra=s/
  • https://inetsovety.ru/comment-subscriptions/?srp=4164&sra=s/

Они ведут на страницу редактирования подписки. В панели Гугл Вебмастер появляются отслеживаемые параметры srp и sra:

comment-subscriptions-srp

Из-за этих дублей выдача Гугла по нашему сайту пополняется сотнями мусорных страниц.

Как избавиться от таких страниц с параметром comment-subscriptions/?srp=

В файле .htaccess настроим редирект со страницы *comment-subscriptions/?srp=4020&sra=s/ на страницу *comment-subscriptions/

Добавляем туда вот такие две строчки:

RewriteCond %{QUERY_STRING} ^srp= [NC]

RewriteRule (.*) $1? [R=301,L]

Если Вы уже сталкивались с дублями replytocom, то знаете что делать. Для тех, кто впервые слышит о дублях, даю ссылку на статью https://inetsovety.ru/kak-ubrat-dubli-stranits-replytocom/  Внимательно изучите ее и проверьте свой блог на дубли. Наличие дублей на сайте приводит к падению трафика из Гугла!

Как видите, организовать подписку на уведомления о новых комментариях для посетителей блога не сложно. Никаких изменений в код шаблона вносить не нужно. Просто устанавливаете плагин, и даже можете ничего не изменять в настройках, а оставить, как есть по умолчанию. И плагин будет работать. Справится даже новичок, учитывая что Subscribe to Comments Reloaded на русском. Единственное на что следует обратить внимание — удалить дубли comment-subscriptions/?srp.

На сегодня все. До встречи!



2014-06-26T12:33:32
Блог на WordPress