Уроки Питон №1-№16. Основы PHYTON.

Урок Питона №1. Типы и модель данных
Урок Питона №2. Целые и вещественные числа. Арифметические операции в Питоне
Урок Питона №3. Условные операторы if и циклы for while в Питоне
Урок Питона №4 . Работа со списками list , list.append(x) в Питоне
Урок Питона № 5. Кортежи (tuple) в Питоне
Урок Питона №6. Словари (dict) в Питоне
Урок Питона №7. Функции def в Питоне
Урок Питона №8. Ошибки и исключениями в Питоне
Урок Питон №9. Ввод-вывод данных input(), int(input()). Работа с файлами в Питоне
Урок Питона №10. Модули (import math) и пакеты в Питоне
Урок Питона №11. Итераторы (iter(num_list)) и генераторы (yield)в Питоне
Урок Питон №12. Установка пакетов, Менеджер пакетов pip в Питоне
Урок Питон №13. Virtualenv-Виртуальные окружения в Питоне
Урок Питон №14. def repeater(s: str, n: int) -> str: Аннотация типов в Питон
Урок Питон №15. Декораторы функций (@simple_decore) в Питон
Урок Питон №16. Объектная модель (sq = [i**2 for i in range(1, 6)]) в Питон

 Урок 1. Типы и модель данных

В данном уроке разберем как Python работает с переменными и определим какие типы данных можно использовать в рамках этого языка. Подробно рассмотрим модель данных Python, а также механизмы создания и изменения значения переменных.

Немного о типизации языков программирования

Если достаточно формально подходить к вопросу о типизации языка Python, то можно сказать, что он относится к языкам с неявной сильной динамической типизацией.

Неявная типизация означает, что при объявлении переменной вам не нужно указывать её тип, при явной – это делать необходимо. В качестве примера языков с явной типизацией можно привести Java, C++. Вот как будет выглядеть объявление целочисленной переменной в Java и Python.

Java:

int a = 1;

Python:

a = 1

Также языки бывают с динамической и статической типизацией. В первом случае тип переменной определяется непосредственно при выполнении программы, во втором – на этапе компиляции (о компиляции и интерпретации кратко рассказано далее). Как уже было сказано Python – это динамически типизированный язык, такие языки как С, C#, Java – статически типизированные.

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

Типы данных в Python

В Python типы данных можно разделить на встроенные в интерпретатор (built-in) и не встроенные, которые можно использовать при импортировании соответствующих модулей.

К основным встроенным типам относятся:

  1. None (неопределенное значение переменной)
  2. Логические переменные (Boolean Type)
  3. Числа (Numeric Type)
    1. int – целое число
    2. float – число с плавающей точкой
    3. complex – комплексное число
  4. Списки (Sequence Type)
    1. list – список
    2. tuple – кортеж
    3. range – диапазон
  5. Строки (Text Sequence Type )
    1. str
  6. Бинарные списки (Binary Sequence Types)
    1. bytes – байты
    2. bytearray – массивы байт
    3. memoryview – специальные объекты для доступа к внутренним данным объекта через protocol buffer
  7. Множества (Set Types)
    1. set – множество
    2. frozenset – неизменяемое множество
  8. Словари (Mapping Types)
    1. dict – словарь

Модель данных

Рассмотрим как создаются объекты в памяти, их устройство, процесс объявления новых переменных и работу операции присваивания.

Для того, чтобы объявить и сразу инициализировать переменную необходимо написать её имя, потом поставить знак равенства и значение, с которым эта переменная будет создана. Например строка:

b = 5

объявляет переменную b и присваивает ей значение 5.

Целочисленное значение 5 в рамках языка Python по сути своей является объектом. Объект, в данном случае – это абстракция для представления данных, данные – это числа, списки, строки и т.п. При этом, под данными следует понимать как непосредственно сами объекты, так и отношения между ними (об этом чуть позже). Каждый объект имеет три атрибута – это идентификатор, значение и тип. Идентификатор – это уникальный признак объекта, позволяющий отличать объекты друг от друга, а значение – непосредственно информация, хранящаяся в памяти, которой управляет интерпретатор.

При инициализации переменной, на уровне интерпретатора, происходит следующее:

  • создается целочисленный объект 5 (можно представить, что в этот момент создается ячейка и 5 кладется в эту ячейку);
  • данный объект имеет некоторый идентификатор, значение: 5, и тип: целое число;
  • посредством оператора “=” создается ссылка между переменной b и целочисленным объектом 5 (переменная b ссылается на объект 5).

Имя переменной не должно совпадать с ключевыми словами интерпретатора Python. Список ключевых слов можно найти . Также его можно получить непосредственно в программе, для этого нужно подключить модуль keyword и воспользоваться командой keyword.kwlist.

>>> import keyword

>>> print("Python keywords: ", keyword.kwlist)

Проверить является или нет идентификатор ключевым словом можно так:

>>> keyword.iskeyword("try")

True

>>> keyword.iskeyword("b")

False

Для того, чтобы посмотреть на объект с каким идентификатором ссылается данная переменная, можно использовать функцию id().

>>> a = 4

>>> b = 5

>>> id(a)

1829984576

>>> id(b)

1829984592

>>> a = b

>>> id(a)

1829984592

Как видно из примера, идентификатор – это некоторое целочисленное значение, посредством которого уникально адресуется объект. Изначально переменная a ссылается на объект 4 с идентификатором 1829984576, переменная b – на объект с id = 1829984592. После выполнения операции присваивания a = b, переменная a стала ссылаться на тот же объект, что и b.

Тип переменной можно определить с помощью функции type(). Пример использования приведен ниже.

>>> a = 10

>>> b = "hello"

>>> c = (1, 2)

>>> type(a)

<class 'int'>

>>> type(b)

<class 'str'>

>>> type(c)

<class 'tuple'>

Изменяемые и неизменяемые типы данных

В Python существуют изменяемые и неизменяемые типы.

К неизменяемым (immutable) типам относятся: целые числа (int),  числа с плавающей точкой (float), комплексные числа (complex), логические переменные (bool), кортежи (tuple), строки (str) и неизменяемые множества (frozen set).

К изменяемым (mutable) типам относятся: списки (list), множества (set), словари (dict).

Как уже было сказано ранее, при создании переменной, вначале создается объект, который имеет уникальный идентификатор, тип и значение, после этого переменная может ссылаться на созданный объект.

Неизменяемость типа данных означает, что созданный объект больше не изменяется. Например, если мы объявим переменную k = 15, то будет создан объект со значением 15, типа int и идентификатором, который можно узнать с помощью функции id().

>>> k = 15

>>> id(k)

1672501744

>>> type(k)

<class 'int'>

Объект с id = 1672501744 будет иметь значение 15 и изменить его уже нельзя.

Если тип данных изменяемый, то можно менять значение объекта. Например, создадим список [1, 2], а потом заменим второй элемент на 3.

>>> a = [1, 2]

>>> id(a)

47997336

>>> a[1] = 3

>>> a

[1, 3]

>>> id(a)

47997336

Как видно, объект на который ссылается переменная a, был изменен. Это можно проиллюстрировать следующим рисунком.

В рассмотренном случае, в качестве данных списка, выступают не объекты, а отношения между объектами. Т.е. в переменной хранятся ссылки на объекты содержащие числа 1 и 3, а не непосредственно сами эти числа.

P.S.

Популярные репетиторы:

Рейтинг 5 из 5: 45 отзывов
 
C самого основания своего продвижения по службе, я грезил собрать во едино пару моих основных увлечений: Математику, Информатику и Обучение, когда еще обучался в аспирантуре.

Успешный математик для школьников и студентов, PhD, педагогический стаж более 19 лет, экстренно   подготовит без посредников контрольной работе по математике на 5 курс с помощью современных схем по формированию памяти и   умственной работы . Помощь в оформлении конспектов.

Участвует в международных научных конференциях SIGIR, WWW и CVPR . Впечатляюще поработал директором в интернет-компании по Information Retrieval и Перцептронам. Легко "кодит" на Node, R и Perl. Консультирование по математическим программам MathCad, MathLab и SPSS .

Более 320 учащихся  поступили «на бюджет» в ВУЗы Москвы: Школа Анализа Данных Яндекса, ВШЭ, МГТУ и МАИ и многие другие. Занятия ведутся Локально в Москве м. Китай-город и по Google Hangout. Опыт преподавателя по математике для абитуриентов более 20 лет. Speaks to English.

Запись на занятия

Ваше сообщение отправлено