Различия между версиями 2 и 3
Версия 2 от 2015-06-08 19:54:11
Размер: 7834
Редактор: FrBrGeorge
Комментарий:
Версия 3 от 2015-06-08 19:55:02
Размер: 7837
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 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

Значащие отступы

Вместо операторных скобок используется одинаковый отступ всех операторов в блоке (это называется «блок с отступом»).

   1 for i in range(10):
   2     n = 3*i**2 + 2*i + 7
   3     print (i,n)
   4 print "Done"

Достоинство: практически любую программу можно прочесть. Недостаток: надо избегать использования символов табуляции.

Связывание

Значение любого питоновского выражения — это объект. Объект можно связать с помощью имени или в качестве элемента составного объекта.

  • ...
  • Передача параметров «по соиспользованию»

«Списки»

Тип данных «list» в питоне — это динамический массив связей. Тип объекта может быть любым, но поскольку любая связь имеет одинаковое внутреннее представление, сложность индексации в объекте типа list — O(1). Динамическая реогранизация массива при его значительном увеличении/уменьшении происходит прозрачно для программиста.

Словари

Цикл с итерируемым объектом

Неявная динамическая типизация (duck typing)

Универсалные логические выражения

  • Нулевой объект класса
  • Частичное вычисление AND и OR

Наличие современных программных конструкций

  • Исключения как средство управления вычислениями
  • Повторно-входимые функции
  • Декораторы
  • Контексты

Динамическая объектная модель

Строки документации

Сравнение с другими языками

Паскаль и Си

  • У имён объектов нет типов, потому что они — не переменные, а просто именованные связи. Считается плохим тоном программирования использовать одно и то же имя для объектов разного типа.
  • Действительное отличие подхода «имя == связь» от подхода «имя == переменная» начинается
  • (Паскаль) Нет разделения на функции и процедуры, функция без return возвращает None, возвращаемое значение любой функции можно не использовать.

  • (Паскаль) Как и в Си, в Питоне «==» — это сравнение, а «=» — присваивание

  • (Си) В питоне, как в Си, есть операции изменения объекта (например, «+=» — прибавление). Разумеется, изменяться может только неконстантный объект (например, список), для константного объекта (число, строка) результат такой операции — новый объект, результат вычисления выражения. В приведённом примере в результате прибавления списочный объект остаётся тем же, а целочисленный меняется на другой.

       1 >>> a=[1,2,"QQ"]
       2 >>> id(a)
       3 140178647658648
       4 >>> a+=["NN",1.234]
       5 >>> a
       6 [1, 2, 'QQ', 'NN', 1.234]
       7 >>> id(a)
       8 140178647658648
       9 >>> b=3
      10 >>> id(b)
      11 6398248
      12 >>> b+=7
      13 >>> b
      14 10
      15 >>> id(b)
      16 6398080
    
  • Передача параметров в функции происходит строго по соиспользованию. Это значит, что фактическими параметрами функции являются объекты (возможно, только что вычисленные), для них создаются имена в локальном пространстве имён функции, а при выходе из функции эти имена уничтожаются. Копирования данных не происходит. В Си передача данных строго по значению (передача данных по ссылке имитируется передачей указателя на объект). В паскале передача данных либо по значению, либо по ссылке (указывется явно).
  • Частичное вычисление AND и OR (см. выше) как в Си, но значение — не булевское

  • Структуры (записи) как отдельные конструкции в Питоне не выделены. Логически — это просто объекты, у которых нет методов.
  • Структуры (записи) как последовательности байтов, в которые упакованы объекты разного типа, в синтаксис не встроены, поддерживаются модулем strcut

  • Массивы как последовательности байтов, представляющие собой последовательности данных одного типа, встречаются и используются в Питоне редко. Есть встроенные типы bytearray/bytes, выделенный модуль array. Самые мощные массивы реализованы в стороннем пакете NumPy.

  • В Питоне больше, чем с Си и Паскале, конструкций языка и встроенных типов, некоторые из них нужны не сразу

Python/Features (последним исправлял пользователь FrBrGeorge 2016-11-02 22:28:07)