На этот раз речь пойдет о минусах использовании инструкции from.
— У инструкции from менее явное отображение переменной (имя name несет меньше информации, чем module.name), поэтому некоторые пользователи Python рекомендуют использовать инструкцию import вместо from. Но это иногда можно опровергнуть, так как такой использование from происходит довольно таки часто и без страшных последствий.
— Инструкция from способна повреждать пространства имен, по крайней мере, в принципе – если использовать ее для импортирования переменных, когда существуют одноименные переменные в имеющейся области видимости, то эти переменные просто будут перезаписаны. Эта проблема отсутствует при использовании инструкции import, потому что доступ к содержимому импортируемого модуля возможен только через его имя (имя module.attr не конфликтует с именем attr в текущей области видимости).
Пока вы понимаете и контролируете все, что может происходить при использовании инструкции from, во всем этом нет большой проблемы, особенно если импортируемые имена указываются явно (например, from module import x, y, z).
С другой стороны, инструкция from скрывает в себе более серьезные проблемы, когда используется в комбинации с функцией reload, так как импортированные имена могут ссылаться на предыдущие версии объектов. Кроме того, инструкция в форме from module import * действительно может повреждать пространства имен и затрудняет понимание имен, особенно когда она применяется более чем к одному файлу, – в этом случае нет никакого способа определить, какому модулю принадлежит то или иное имя, разве только выполнить поиск по файлам с исходными текстами. В действительности форма from * вставляет одно пространство имен в другое, что сводит на нет преимущества, которые несет возможность разделения пространств имен.
Пожалуй, лучший совет, который можн
изменяемый объект в аргументах
def func(f, l=[]):
l.append(f)
return l
func является потенциально опасной. Смотрим что происходит при её использовании
>>> print(func(1))
[1]
>>> print(func(2))
[1, 2]
l ссылается на один и тот же объект, который все время и изменяется (вспоминаем концепцию python)
Решение очевидное — определить список в функции
Такое решение используется и в популярном фреймворке request
class Request(RequestHooksMixin):
def __init__(self,
method=None,
url=None,
headers=None,
files=None,
data=None,
params=None,
auth=None,
cookies=None,
hooks=None):
# Default empty dicts for dict params.
data = [] if data is None else data
files = [] if files is None else files
headers = {} if headers is None else headers
params = {} if params is None else params
hooks = {} if hooks is None else hooks
Ссылки
https://github.com/kennethreitz/requests/blob/master/requests/models.py
Автор: Евгений Курочкин
Медитация Художник своей жизни
Вы давно рисовали? Просто так, от души…как рисуют дети, не особенно переживая, что они не умеют и у них что-то не получится. А ведь творчество раскрывает скрытые резервы и таланты, проявляя все самое лучшее, что есть в Вас. И сегодня у Вас будет возможность проявить себя и ощутить сполна в роли настоящего художника – Художника своей жизни!

Как поднять свой внутренний ресурс за 1 минуту?
Разговор Души с Богом
— Алло, здравствуйте! Могу я поговорить с Богом?
— Здравствуйте! Соединяю!
— Здравствуй, Душа моя! Я внимательно слушаю тебя!
— Господи, впереди Новый год! Прошу Тебя, исполни мои желания!
— Конечно, дорогая, все, что угодно! Но сначала, я тебя соединю с отделом исполненных желаний: постарайся понять, какие ты допускала ошибки в прошлом!
Читать
Подготовка образов HDD с DOS для IPMI
Как удаленно прошить BIOS системной платы или контроллер через IPMI?
В большинстве случаев для этого нужен DOS, но некоторые контроллеры нужно шить в EFI shell. При наличии физического доступа к серверу всегда есть дежурная флешка с DOS. Для удаленного способа нам придется подготовить образ загрузочного HDD с DOS, это проще и удобнее, чем готовить ISO-образ. IPMI в современных платах Supermicro может использовать в качестве Virtual Media образы HDD.
Тривиальная задача, но начинающих администраторов может поставить в тупик. Для начала нам понадобится дистрибутив MSDOS (некоторые платы не шьются под FreeDOS) и любой гипервизор. В данном случае будем использовать VirtualBox, но подойдет, естественно, любой, где запускается DOS и с которым вам удобно работать. Версию MSDOS лучше всего взять с поддержкой длинных имен, например 7.1.
Создаем ВМ с диском, достаточным для размещения образа BIOS. Размер образа для современных плат Supermicro X9 — 16МиБ, можно создать диск с небольшим запасом — 20МиБ. Добавляем установочный ISO c DOS.
Уверен, что с такой увлекательной и сложной задачей, как установка DOS вы можете справиться самостоятельно. Финальная задача — получить удобный способ работы с образом: добавлять/убирать из него файлы с прошивками. IMHO, это удобно делать в Linux. Для начала нужно конвертировать образ диска из формата VDI в простой «сырой» образ:
VBoxManage clonehd -format RAW dos.vdi dos.raw
Далее возникает небольшая проблема. Сразу смонтировать образ не получится, так как монтировать нужно не диск целиком, а раздел на нем. Для этого нужно узнать его смещение. Сделать это можно при помощи parted. Командой unit задаем единицу измерения (в байтах) и командой print выводим информацию о разделах.
[root@stand ~]# parted dos.img GNU Parted 2.1 Using /root/dos.img Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) unit B (parted) print Model: (file) Disk /root/dos.img: 20971520B Sector size (logical/physical): 512B/512B Partition Table: msdos
Number Start End Size Type File system Flags
1 32256B 20643839B 20611584B primary fat16 boot
(parted)
Нужное смещение — 32256 байт. Можно монтировать:
mkdir /mnt/disk1 mount -o loop,offset=32256 -t vfat dos.img /mnt/disk1
Копируем прошивки и еще какие-нибудь полезности (например, VC или NC, прописываем автозапуск в autoexec.bat), размонтируем образ, и можно грузиться:
При большом количестве администрируемых серверов можно грузить образы при помощи PXELinux, благо он поддерживает загрузку сжатых через gzip образов.
Автор: Dmitry Nosachev



