Архив автора: admin

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

Стройная фигура как результат здорового образа жизни

Обладать стройной, красивой фигурой хотят все. К сожалению, природа не всех наградила природной гибкостью и стройностью. Как правило, о том, что хорошо бы похудеть, многие вспоминают к лету, когда приходит пора «выгуливать» тонкие блузки, обтягивающие брюки и, конечно же, купальники. К этому моменту у очень многих обнаруживаются «спасательные круги», целлюлит в разных стадиях развития и парочка лишних килограммов, от которых необходимо срочно избавляться. По стране несётся сплошное женское «ой»… Не раз доводилось слышать жалобы о том, что многим женщинам никакие диеты и спортивные упражнения не помогают похудеть: если с их помощью и удаётся сбросить лишние килограммы, то они очень быстро возвращаются. Таких дам хочется спросить: простите, если у вас дома каждый день будет образовываться два ведра с мусором, а вы станете выносить только одно, кто повинен в том, что в скором времени ваша квартира превратится в помойку? С тем, что в квартире нужно поддерживать чистоту и порядок, согласятся все. Но почему же тогда многие из нас так наплевательски относятся к собственному организму, который дороже любых квартир, потому что дан нам единожды и навсегда? Сегодняшняя наука придумала немало методов «моментального» похудения, в числе которых пресловутая липосакция – откачивание лишнего жира хирургическим путём. Но так ли она безопасна? Любая операция, тем более такая, которая проводится под общей анестезией, является грубым вмешательством в деятельность организма и по-своему опасна. Даже если удаление жира проводится ультразвуковым методом, всё равно это – стресс для организма. Кроме того, не тешьте себя иллюзиями, что, откачав определённое количество жира, вы сразу оденете мини-бикини и отправитесь на пляж. Восстановительный период после такой операции, предполагающий ношение корректирующего белья, занимает от двух недель до двух месяцев. Пытаясь избавиться от лишнего веса, мы боремся не с причиной, а с её последствиями. Наука доказала, что целлюлит – это результат борьбы организма с разрушающими его шлаками в условиях обезвоживания. Тезис о том, что следует пить не менее двух литров воды в сутки, уже навяз в зубах, а многие ли делают это? Между тем, организму нужна вода (именно вода, а не чай или кофе) для вымывания шлаков. При обезвоживании межклеточная жидкость превращается в вязкое болото, в котором клетки постепенно отравляются продуктами собственной жизнедеятельности, а организм пытается бороться со шлаковыми отложениями, замуровывая их с помощью жира. Так появляется целлюлит. Поэтому для того, чтобы избавиться от целлюлита, нужно прежде всего очистить организм от шлаков. Для этого следует много пить, в том числе соков. Чаще всего повышенный аппетит – это не просто желание «поесть», а желание организма насытиться витаминами. Поэтому периодические очистки организма и диета, богатая витаминами, не только способствуют похудению, но и снижают аппетит. Для того, чтобы хорошо выглядеть, нужно ответственно относиться к своему здоровью, питаться здоровой, витаминизированной пищей, заниматься физическими упражнениями. Только упорная работа над собой может привести человека к здоровью и красоте.