Python/Учебник Python 3.1: различия между версиями

Содержимое удалено Содержимое добавлено
викификатор на всю страницу
Строка 2073:
15</source>
 
Чтобы записать в файл нечто отличное от строки, предварительно это нечто нужно в строку сконвертировать<ref>''(Прим. перев.)'' Возможно, подразумевается [[w:ru:%D0%9E%D1%82%D0%B2%D0%B5%D1%82_%D0%BD%D0%B0_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D0%B9_%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81_%D0%B6%D0%B8%D0%B7%D0%BD%D0%B8%2C_%D0%B2%D1%81%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B8_%D0%B2%D1%81%D0%B5%D0%B3%D0%BE_%D1%82%D0%B0%D0%BA%D0%BE%D0%B3%D0%BEОтвет на главный вопрос жизни, вселенной и всего такого|ответ на главный вопрос жизни, вселенной и всего такого]]</ref>:
 
<source lang="python">>>> value = ('ответ', 42)
Строка 2427:
Кстати, слово ''атрибут'' (<tt>attribute</tt>) я применяю к любому имени, следующему за точкой. Например, в выражении <code>z.real</code>, <code>real</code> — это атрибут объекта <code>z</code>. Строго говоря, ссылки на имена в модуле являются ссылками на атрибуты: в выражении <code>''имя_модуля''.''имя_функции''</code> под ''имя_модуля'' скрывается объект модуля, а под ''имя_функции'' — его атрибут. В таком случае обнаруживается прямая связь между атрибутами модуля и глобальными именами, определёнными в модуле: они разделяют между собой одно и тоже пространство имён<ref>Исключая одну тонкость. У объектов модулей есть скрытый, только для чтения, атрибут под именем <code>__dict__</code>, возвращающий словарь, использовавшийся для формирования пространства имён модуля; имя <code>__dict__</code> является атрибутом, но не глобальным именем. Очевидно, что всё это нарушает абстракцию реализации пространства имён и его использование следует ограничить вещами вроде посмертных отладчиков</ref>.
 
Запись в атрибуты может быть запрещена (''атрибут только для чтения'', <tt>read-only attribute</tt>) или разрешена (''перезаписываемый атрибут'', <tt>writable attribute</tt>). В последнем случае присваивание атрибуту является возможным. Атрибуты модуля перезаписываемы: вы можете написать «<code>modname.the_answer = 42</code>»<ref>''(Прим. перев.)'' Снова [[w:ru:%D0%9E%D1%82%D0%B2%D0%B5%D1%82_%D0%BD%D0%B0_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D0%B9_%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81_%D0%B6%D0%B8%D0%B7%D0%BD%D0%B8%2C_%D0%B2%D1%81%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B8_%D0%B2%D1%81%D0%B5%D0%B3%D0%BE_%D1%82%D0%B0%D0%BA%D0%BE%D0%B3%D0%BEОтвет на главный вопрос жизни, вселенной и всего такого|ответ на главный вопрос жизни, вселенной и всего такого]]</ref>. Перезаписываемые атрибуты могут также быть удалены оператором <code>del</code>. Например, код «<code>del modname.the_answer</code>» удалит атрибут <code>the_answer</code> из объекта с именем <code>modname</code>.
 
Пространства имён создаются в различные моменты и имеют разное время жизни. Пространство имён, содержащее встроенные имена создаётся при запуске интерпретатора и не удаляется никогда. Глобальное пространство имён модуля создаётся при вычитке определения модуля. Обычно, пространства имён модулей также «живут» до выхода из интерпретатора. Выражения, выполняемые верхне-уровневым порождением интерпретатора, прочитанные из файла сценария или интерактивно, рассматриваются как часть модуля под названием <code>__main__</code>, поэтому у них есть своё собственное глобальное пространство имён. (Встроенные имена по факту также живут в модуле, он называется <code>builtins</code>).