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

Пространства имен модулей

Модули будут, вероятно, более понятны, если представлять их, как простые пакеты имен, – то есть место, где определяются переменные, которые должны быть доступны остальной системе.
С технической точки зрения каждому модулю соответствует отдельный файл, и интерпретатор создает объект модуля, содержащий все имена, которым присвоены какие-либо значения в файле модуля. Проще говоря, модули – это всего лишь пространства имен (места, где создаются имена), и имена, находящиеся в модуле, называются его атрибутами.В данной тематике мы разберем как работает этот механизм.

Файлы создают пространства имен
Итак, как же файлы трансформируются в пространства имен? Суть в том, что каждое имя, которому присваивается некоторое значение на верхнем уровне файла модуля (то есть не вложенное в функции или в классы), превращается в атрибут этого модуля.
Например, операция присваивания, такая как X = 1, на верхнем уровне модуля M.py превращает имя X в атрибут модуля M, обратиться к которому из-за пределов модуля можно как M.X. Кроме того, имя X становится глобальной переменной для программного кода внутри M.py, но нам необходимо более формально объяснить понятия загрузки модуля и областей видимости, чтобы понять, почему:
•  Инструкции  модуля  выполняются  во  время  первой  попытки  импорта. Когда модуль импортируется в первый раз, интерпретатор Python создает пустой объект модуля и выполняет инструкции в модуле одну за другой, от начала файла до конца.
•  Операции присваивания, выполняемые на верхнем уровне, создают атрибуты  модуля.  Во  время  импортирования  инструкции  присваивания,  выполняемые на верхнем уровне файла и не вложенные в инструкции def или class (например, =, def), создают атрибуты объекта модуля – при присваивании имена сохраняются в пространстве имен модуля.
•  Доступ  к  пространствам  имен  модулей  можно  получить  через  атрибут __dict__  или  dir(M).  Пространства  имен  модулей,  создаваемые  операцией импортирования, представляют собой словари – доступ к ним можно получить через встроенный атрибут __dict__, ассоциированный с модулем, и с помощью функции dir. Функция dir – это примерный эквивалент отсортированного списка ключей атрибута __dict__, но она включает унаследованные имена классов, может возвращать не полный список и часто изменяется от версии к версии.
 Модуль  –  это  единая  область  видимости  (локальная  является  глобальной). Как мы видели в главе 17, имена на верхнем уровне модуля подчиняются тем же правилам обращения/присваивания, что и имена в функциях, только в этом случае локальная область видимости совпадает с глобальной (точнее, они следуют тому же правилу LEGB поиска в областях видимости, с которым мы познакомились в главе 17, только без уровней поиска L и E). 
Но в модулях область видимости модуля после загрузки модуля превращается в атрибут-словарь объекта модуля. В отличие от функций (где локальное пространство имен существует только во время выполнения функции), область видимости файла модуля превращается в область видимости атрибутов объекта модуля и никуда не исчезает после выполнения операции импортирования.
Ниже эти понятия демонстрируются в программном коде. Предположим, мы 
создаем в текстовом редакторе следующий файл модуля с именем module2.py:
Print(‘starting to load…’)
import sys
name = 42
 
def func(): pass
 
class klass: pass
 
print(‘done loading.’)

Когда  модуль  будет  импортироваться  в  первый  раз  (или  будет  запущен  как программа), интерпретатор выполнит инструкции модуля от начала до конца. В ходе операции импортирования одни инструкции создают имена в пространстве имен модуля, а другие выполняют определенную работу. Например, две инструкции print в этом файле выполняются во время импортирования:
>>> imp
ort module2
starting to load…
done loading.
Но  как  только  модуль  будет  загружен,  его  область  видимости  превратится в пространство имен атрибутов объекта модуля, который возвращает инструкция import. После этого можно обращаться к атрибутам в этом пространстве 
имен, дополняя их именем вмещающего модуля:
>>> module2.sys
 
>>> module2.name
42
 
>>> module2.func
>
 
>>> module2.klass
Здесь именам sys, name, func и klass были присвоены значения во время выполнения инструкций модуля, поэтому они стали атрибутами после завершения операции импортирования. О классах мы будем говорить в шестой части книги, но обратите внимание на атрибут sys – инструкции  import действительно присваивают объекты модулей именам, а любая операция присваивания на 
верхнем уровне файла создает атрибут модуля.
Внутри интерпретатора пространства имен хранятся в  виде объектов словарей. Это самые обычные объекты словарей с обычными методами. Обратиться к словарю пространства имен модуля можно через атрибут __dict__ модуля (не забудьте обернуть вызов этого метода вызовом функции list – в Python 3.0 он возвращает объект представления!):
>>> list(module2.__dict__.keys())
[‘name’, ‘__builtins__’, ‘__file__’, ‘__package__’, ‘sys’, ‘klass’, ‘func’,
‘__name__’, ‘__doc__’]
Имена, которые были определены в файле модуля, становятся ключами внутри словаря, таким образом, большинство имен здесь отражают операции 
присваивания на верхнем уровне в файле. Однако интерпретатор Python  добавляет в пространство имен модуля еще несколько имен, например __file__ содержит имя файла, из которого был загружен модуль, а  __name__ – это имя, под которым модуль известен импортерам (без расширения .py и без пути к каталогу).

Автор: Няшный Человек
Дата публикации: 2014-08-16T04:04:00.000+03:00

exrex генератор данных по регулярным выражениям

Всем привет!

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

API крайне простой
count — возвращет количество возможных вариаций
parse — парсер регулярных выражений
getone — возвращает псевдо-рандомное значение
generate — возвражает генератор со всеми вариантами

Примеры использования

На всякий замечу, что у вас по некоторым примером вывод может быть другим

>>> print exrex.getone('[A-Z][a-z]{1,10} [A-Z][a-z]{1,10}')
Boris Yeltsin

>>> print exrex.getone('+[0-9]([0-9]{3}) [0-9]{3}-[0-9]{2}-[0-9]{2}')
+5(777) 790-68-69

>>> print [r for r in exrex.generate('|'.join(str(i) for i in range(5)))]
[u'0', u'1', u'2', u'3', u'4']

>>> exrex.count('[0-9]{1}')
10

>>> print exrex.parse('[0-9]{1,100}')
[('max_repeat', (1, 100, [('in', [('range', (48, 57))])]))]

Есть также возможность запуска из консоли

>>> python -m exrex -r [0-9]{2}
31
Возвращает псевдо-рандомное число из 2 цифр

За более подробной информацией в ссылки.


Ссылки

https://github.com/asciimoo/exrex
http://exrex.readthedocs.org/

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

Декоративные аксессуары

Коллективная Он-лайн Медитация «Очищение и Создание счастливого сценария жизни»

пустите измененияКоллективная Он-лайн Медитация

«Очищение и Создание счастливого сценария жизни»

Сегодня, 22 лунный день на убывающей луне, считается днем знаний и опыта.  Очень хорошо посвятить себя в этот день учебе или медитации, тайным знаниям и поискам мудрости. В этот день даже простое наблюдение за происходящим на улице, может дать Вам ответ на нужный вопрос. Увеличиваются способности к духовному росту, и к творчеству. Также в этот день полезно пересматривать свое прошлое и определять свое будущее.

Читать

Что ждет бухгалтера в 2013г. Сложные вопросы в бухгалтерском учете

Что ждет бухгалтера в 2013г. Сложные вопросы в бухгалтерском учете

Что ждет бухгалтера в 2013г. Сложные вопросы
в бухгалтерском учете
================================================================================
Анастасия Кирилова on 28/01/2013 09:12:00

Приглашаем Вас на бесплатный семинар. Для
Вас выступят приглашенные эксперты в
области бухучета и налогообложения, а
специалисты компании «1С:ВДГБ» на примере
программных продуктов 1С помогут Вам
разобраться в сложных вопросах и дадут
ценные рекомендации.
Посетители семинара получат
методологическую помощь в ведении учета,
узнают последние изменения в
законодательстве, а также освоят
эффективные методы работы в программах 1С.
Дата проведения: 21 февраля 2013 года, с 10:00 до
14:00 (Москва)
Место проведения: М. Достоевская,
Никоновский пер., д. 26. стр. 6.
Участие бесплатное.
Лектор:
Медведева Марина Владимировна
К.э.н., профессиональный аудитор (аттестат
МинФина РФ). Консультант ряда крупных
аудиторских компаний и ВУЗов. Имеет
многолетний опыт преподавательской
(аттестат) и консультационной, практической
работы в области бухгалтерского учета и
налогообложения (с 1992г.). Автор программ,
методических пособий по бухучету, налогам и
аудиту для профессиональных бухгалтеров.
Программа семинара:
*
Закон № 227-ФЗ о трансфертном
ценообразовании и контролируемых сделках:
кого коснется контроль и кто будет этот
контроль осуществлять; *
Изменения по налогу на прибыль с 2013 года:
проценты по кредитам и займам,
восстановление амортизационной премии и
прочие;
*
«Зарплатные» проблемы – 2013:
*
исчисление больничных, декретных и
«детских» пособий, новые правила с 1 января
2013 года; *
страховые взносы, ставки, льготы,
отчетность; *
проблемы при удержании НДФЛ: *
«отпускной» резерв и другие правила
бухгалтерского учета.
*
Арбитражная практика по налогам в 2012 году,
последние письма Минфина и ФНС; *
Основные изменения по специальным
налоговым режимам (УСНО, ЕНВД) в 2013 году. *
Развитие 1С:Бухгалтерии 8 ред. 3.0 — новые
возможности для удобной работы; *
Ответы на вопросы и консультации
специалистов «1С:ВДГБ»
*
Розыгрыш призов.
Программа семинара будет дополняться!
Подробная информация по телефону: (495) 223-32-11,
доб . 609 Подгорный Валентин
Источник:
Компания «1С:ВДГБ» —
http://www.vdgb.ru/press_center/events/index.php?ELEMENT_ID=50576&sphrase_id=44242
Тел: +7 (495) 223-32-11

Parrotify Captcha -Заработок на баннерной рекламе в капче / дополнительный доход на трафике / заработок на бирже заданий.

Parrotify Captcha -Заработок на баннерной рекламе в капче / дополнительный доход на трафике / заработок на бирже заданий.

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

Сила текущего Момента жизни

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

Мы с Юрой увлекаемся большим теннисом. Теннис развивает выдержку, высокую концентрацию внимания и осознанность… Почему это так?

Потому что в те мгновения пока на тебя летит мяч, ты должен обладать способностью собраться, сконцентрировать свое внимание, предугадать его траекторию и настроиться на ответный удар…

Читать