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

19 байт добавлено ,  3 года назад
пунктуация
(пунктуация)
'SplatA'</source>
 
Полезный инвариант операции среза: <code>s[:i] + s[i:]</code> эквивалентно <code>s</code>.
 
<source lang="python">>>> word[:2] + word[2:]
...</source>
 
Если бы здесь использовались операторы <code>pass</code>, а позже вы бы запускали тесты, они могли бы упасть без указания причины. Использование <code>NotImplementedError</code> принуждает этот код породить исключение, сообщая вам конкретное место, где присутствует незавершённый код. Обратите внимание на два способа порождения исключений. Первый способ, без сообщения, но сопровождаемый комментарием, позволяет вам оставить комментарий когда вы будете подменять выброс исключения рабочим кодом, который, в свою очередь, в идеале, будет хорошим описанием блока кода, для которого исключение предназначалось заглушкой. Однако, передача сообщения вместе с исключением, как в третьем примере, обуславливает более насыщенный информацией вывод при отслеживании ошибки.
 
=== Определение функций ===
* Используйте строки документации (''док-строки'')
* Применяйте пробелы вокруг символов операций и после запятых, но не добавляйте их в конструкции со скобками: <code>a = f(1, 2) + g(3, 4)</code>
* Называйте ваши классы и функции единообразно; соглашение следующее: используйте <code>CamelCase</code><ref>''(Прим. перев.)'' <tt>CamelCase</tt> (''ВерблюжийСтиль'') — стиль именования идентификаторов, при котором все слова, записанные строчными буквами, объединяются в одно и первая буква каждого слова выделяется заглавной буквой — такая запись напоминает верблюжьи горбы, в связи с чем и названа.</ref> для именования классов и <code>нижний_регистр_с_подчёркиваниями</code></tt><ref>''(Прим. перев.)'' Пусть данный пример по вине переводчика и использует русские буквы, соглашение корректно настаивает на использовании латиницы для именования идентификаторов, см. следующий пункт соглашения</ref> для функций и методов. (обращайтесь к разделу [[Учебник Python 3.1#Первый взгляд на классы|Первый взгляд на классы]] за дополнительной информацией о классах и методах)
* Не используйте в вашем коде изощрённых кодировок<ref>''(Прим. перев.)'' В строковых литералах (не комментариях) это, конечно же, позволено</ref>, если он рассчитан на использование в интернациональной среде. Стандартный набор ASCII всегда работает на ура<ref>''(Прим. перев.)'' Не кодировка, а именно набор символов — латиница, пунктуация и несколько служебных символов. Кодировка по умолчанию для файлов с иходными кодами, начиная с Python 3.0, всегда UTF-8 — дабы существовала возможность использовать национальные символы в строковых литералах и, в редких случаях — комментариях.</ref>.
 
=== Оператор <code>del</code> ===
 
Существует способ удалить элемент, указывая его индекс, а не его значение: оператор <code>del</code>. В отличие от метода <code>pop()</code>, он не возвращает значения. Оператор <code>del</delcode> может также использоваться для удаления срезов из списка или полной очистки списка (что мы делали ранее через присваивание пустого списка срезу). Например:
 
<source lang="python">>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
Значение ПИ — примерно 3.142.</source>
 
Поскольку метод <code>str.format()</code> довольно нов, большая часть исходных кодов Python всё ещё использует операцию <code>%</code>. Однако, со временем, форматирование строк будет удалено из языка, поэтому в большинстве случаев следует использовать <code>str.format()</code>.
 
Больше информации можно найти в разделе [[Справочник по библиотеке Python 3.1#Операции форматирования строк в старом стиле|Операции форматирования строк в старом стиле]].
raise</source>
 
У оператора <code>try-except</code> есть необязательный ''блок <code>else</code>'', который, если присутствует, должен размещаться после всех блоков <code>except</code>. Его полезно использовать при наличии кода, который должен быть выполнен, если блок <code>try</code> не породил исключений. Например:
 
<source lang="python">for arg in sys.argv[1:]:
<source lang="python">x.f()</source>
 
На примере <code>MyClass</code> такой код возвратит строку <code>'привет мир'</code>. Однако, не обязательно вызывать метод так уж сразу: <code>x.f</code> — это объект-метод, он может быть отложен и вызван когда-либо позже. Например:
 
<source lang="python">xf = x.f
print(xf())</source>
 
будет печатать <code>'привет мир'</code> до конца времён.
 
Что конкретно происходит при вызове метода? Вы, возможно, заметили, что <code>x.f()</code> выше был вызван без аргументов, хотя в описании функции <code>f</code> аргумент был указан. Что же случилось с аргументом? Несомненно, Python порождает исключение когда функция, требующая присутствия аргумента, вызвана без единого — даже, если он на самом деле не используется…
В языке Python есть функции, которые работают с наследованием:
 
* Используйте <code>isinstance()</code> чтобы проверить тип объекта: <code>isinstance(obj, int)</code> возвратит <code>True</code> только если <code>obj.__class__</code> является <code>int</code> или некоторым классом, наследованным от <code>int</code>.
* Используйте <code>issubclass()</code> чтобы проверить наследственность класса: <code>issubclass(bool, int)</code> возвратит <code>True</code>, поскольку класс <code>bool</code> является наследником (<tt>subclass</tt>) <code>int</code>. Однако, <code>issubclass(float, int)</code> возвратит <code>False</code>, поскольку класс <code>float</code> не является наследником <code>int</code>.
 
==== Множественное наследование ====
Анонимный участник