7834
Комментарий:
|
7837
|
Удаления помечены так. | Добавления помечены так. |
Строка 48: | Строка 48: |
=== Динамическая объектная модель == * |
=== Динамическая объектная модель === * … |
Особенности ЯП Python3
Базовые особенности
Python2 и Python3
Имеется два похожих языка программирования с разным синтаксисом — Pythoh2 и Python3. Python2 — более новый язык, из которого выброшено то, что показалось неудачным в Python2
Интерпретатор
Python — интерпретируемый язык, поэтому очень много ошибок возникает в процессе выполнения, а не в момент лексического/синтаксического анализа. Например, наличие или отсутствие имени в пространстве видимости проверяется в момент использования этого имени:
1 Python 2.7.8 (default, Nov 20 2014, 14:29:22)
2 [GCC 4.9.2 20141101 (ALT Linux 4.9.2-alt1)] on linux2
3 Type "help", "copyright", "credits" or "license" for more information.
4 >>> a*2
5 Traceback (most recent call last):
6 File "<stdin>", line 1, in <module>
7 NameError: name 'a' is not defined
8 >>> a=2
9 >>> a*2
10 4
Значащие отступы
Вместо операторных скобок используется одинаковый отступ всех операторов в блоке (это называется «блок с отступом»).
Достоинство: практически любую программу можно прочесть. Недостаток: надо избегать использования символов табуляции.
Связывание
Значение любого питоновского выражения — это объект. Объект можно связать с помощью имени или в качестве элемента составного объекта.
- ...
- Передача параметров «по соиспользованию»
«Списки»
Тип данных «list» в питоне — это динамический массив связей. Тип объекта может быть любым, но поскольку любая связь имеет одинаковое внутреннее представление, сложность индексации в объекте типа list — O(1). Динамическая реогранизация массива при его значительном увеличении/уменьшении происходит прозрачно для программиста.
Словари
Цикл с итерируемым объектом
Неявная динамическая типизация (duck typing)
Универсалные логические выражения
- Нулевой объект класса
Частичное вычисление AND и OR
Наличие современных программных конструкций
- Исключения как средство управления вычислениями
- Повторно-входимые функции
- Декораторы
- Контексты
Динамическая объектная модель
- …
Строки документации
Сравнение с другими языками
Паскаль и Си
- У имён объектов нет типов, потому что они — не переменные, а просто именованные связи. Считается плохим тоном программирования использовать одно и то же имя для объектов разного типа.
- Действительное отличие подхода «имя == связь» от подхода «имя == переменная» начинается
(Паскаль) Нет разделения на функции и процедуры, функция без return возвращает None, возвращаемое значение любой функции можно не использовать.
(Паскаль) Как и в Си, в Питоне «==» — это сравнение, а «=» — присваивание
(Си) В питоне, как в Си, есть операции изменения объекта (например, «+=» — прибавление). Разумеется, изменяться может только неконстантный объект (например, список), для константного объекта (число, строка) результат такой операции — новый объект, результат вычисления выражения. В приведённом примере в результате прибавления списочный объект остаётся тем же, а целочисленный меняется на другой.
- Передача параметров в функции происходит строго по соиспользованию. Это значит, что фактическими параметрами функции являются объекты (возможно, только что вычисленные), для них создаются имена в локальном пространстве имён функции, а при выходе из функции эти имена уничтожаются. Копирования данных не происходит. В Си передача данных строго по значению (передача данных по ссылке имитируется передачей указателя на объект). В паскале передача данных либо по значению, либо по ссылке (указывется явно).
Частичное вычисление AND и OR (см. выше) как в Си, но значение — не булевское
- Структуры (записи) как отдельные конструкции в Питоне не выделены. Логически — это просто объекты, у которых нет методов.
Структуры (записи) как последовательности байтов, в которые упакованы объекты разного типа, в синтаксис не встроены, поддерживаются модулем strcut
Массивы как последовательности байтов, представляющие собой последовательности данных одного типа, встречаются и используются в Питоне редко. Есть встроенные типы bytearray/bytes, выделенный модуль array. Самые мощные массивы реализованы в стороннем пакете NumPy.
- В Питоне больше, чем с Си и Паскале, конструкций языка и встроенных типов, некоторые из них нужны не сразу