Теперь вы знаете, как взаимодействовать с интерпретатором Python и выполнять код Python. Пришло время копаться в языке Python. Сначала обсудим основные типы данных, встроенные в Python.

Что вы узнаете в этом уроке?

  • Вы узнаете о нескольких базовых числовых, строковых и логических типах, встроенных в Python. К концу этого урока вы узнаете, как выглядят объекты этих типов и как их представлять..
  • Вы также получите обзор встроенных функций Python. Это заранее написанные фрагменты кода, которые вы можете вызывать для выполнения полезных задач. Вы уже видели встроенную функцию print(), но есть много других.

Содержание

Целые

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

>>> print(123123123123123123123123123123123123123123123123 + 1)
123123123123123123123123123123123123123123123124

Python интерпретирует последовательность десятичных цифр без префикса как десятичное число:

>>> print(10)
10

К целочисленному значению может быть добавлен префикс, который указывает на основание системы счисления, отличное от 10:

Префикс
Интерпретация
Основание
0b (ноль + маленький символ 'b')
0B (ноль + большой символ 'B')
Двоичный
2
0o (ноль + маленький символ 'o')
0O (ноль + большой символ 'O')
Восьмеричный
8
0x (ноль + маленький символ 'x')
0X (zero + ноль + большой символ 'X')
Шеснадцатиричный
16

Например:

>>> print(0o10)
8

>>> print(0x10)
16

>>> print(0b10)
2

Узнать о целочисленных значениях с недесятичной базой можно на сайте Википедии: Двоичная система счисления, Восьмеричная система счисления и Шестнадцатеричная система счисления.

Базовый тип целого числа Python, независимо от базы, используемой для его определения, называется int:

>>> type(10)
<class 'int'>
>>> type(0o10)
<class 'int'>
>>> type(0x10)
<class 'int'>

Числа с плавающей точкой

Типом float в Python представлены числа с плавающей точкой. Значениями float называются числа с десятичной точкой. В запись числа при желании можно добавлять символы e или E с положительным или отрицательным целым числом, что называется Экспоненциальная запись или Научная нотация:

>>> 4.2
4.2
>>> type(4.2)
<class 'float'>
>>> 4.
4.0
>>> .2
0.2

>>> .4e7
4000000.0
>>> type(.4e7)
<class 'float'>
>>> 4.2e-4
0.00042

ГЛУБОКОЕ ПОГРУЖЕНИЕ: представление чисел с плавающей точкой
Ниже рассказывается о внутреннем представлении чисел с плавающей точкой в Python. На самом деле, в Python можно работать и без столь глубокого понимания, так что не беспокойтесь, если это кажется слишком сложным. Если вам это не интересно, то можете смело пропустить.

Практически на любой платформе значения float в Python представляются, как 64-битные числа удвоенной точности, “double-precision”, в соответствии со стандартом IEEE 754. В этом случае максимальное значение, которое может иметь число с плавающей точкой, составляет приблизительно 1.8 ⨉ 10308. Большие числа, которые могут получаться в результате арифметических операций, в Python показываются строкой inf:

>>> 1.79e308
1.79e+308
>>> 1.8e308
inf

Минимально представимое число, отличное от нуля, называемое «машинным нулем», приблизительно равно 5.0 ⨉ 10-324. Все, что меньше, фактически приравнивается к нулю:

>>> 5e-324
5e-324
>>> 1e-325
0.0

Во внутреннем представлении числа с плавающей точкой выглядят, как сумма двоичных дробей. Большинство десятичных дробей не могут быть точно представлены, как сумма двоичных дробей, поэтому в большинстве случаев внутреннее представление числа с плавающей точкой является всего лишь приближением к фактическому значению. На практике разница между фактическим значением и внутренним представлением очень мала и, обычно, не вызывает значительных проблем.

Дополнительно: О представлении чисел с плавающей точкой в Python можно прочитать в разделе Floating Point Arithmetic: Issues and Limitations (Арифметика чисел с плавающей точкой: проблемы и ограничения) документации.

Комплексные числа

Комплексные числа обозначаются следующим образом <real part>+<imaginary part>j. Например:

>>> 2+3j
(2+3j)
>>> type(2+3j)
<class 'complex'>

Строки

Строки представляют собой последовательность символов. Тип строки в Python называется str.

Строковые константы могут быть ограничены одинарными или двойными кавычками. Все символы между открывающими кавычками и соответствующими закрывающими кавычками являются частью строки:

>>> print("I am a string.")
I am a string.
>>> type("I am a string.")
<class 'str'>

>>> print('I am too.')
I am too.
>>> type('I am too.')
<class 'str'>

Строка в Python может содержать столь угодно много символов. Единственным ограничением является рразмер памяти вашей машины. Кроме того, строка может быть пустой:

>>> ''
''

Что если вы вдруг захотите включить символ кавычки в строку? Первое, что приходит в голову, сделать это так:

>>> print('This string contains a single quote (') character.')
SyntaxError: invalid syntax

Как видите, это не работает. В этом примере строка открывается одинарной кавычкой, поэтому Python предполагает, что следующая одинарная кавычка, та, которая в скобках и которую вы бы хотели сделать частью строки, является закрывающим разделителем. Самая правая одинарная кавычка тогда является лишней и вызывает показанную синтаксическую ошибку.

Если вы хотите включить какие-то кавычки в строку, то самый простой способ — сделать ограничителями строки кавычки другого типа. Если в строке нужна одинарная кавычка, то её ограничителями должны быть двойные кавычки и наоборот:

>>> print("This string contains a single quote (') character.")
This string contains a single quote (') character.

>>> print('This string contains a double quote (") character.')
This string contains a double quote (") character.

Escape-последовательности в строках

Иногда вы хотите, чтобы Python по-разному интерпретировал символ или последовательность символов в строке. Это можно сделать одним из двух способов:

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

Это можно сделать, используя обратный сшлэш, обратную косую черту, (\). Обратный слэш показывает, что один или несколько символов должны обрабатываться специальным образом. (Это называется escape-последовательностью, поскольку обратный слеш «экранирует» обычное значение следующей за ним последовательности символов.)

Посмотрим, как это работает

Подавление значения специального символа

Вы уже видели проблемы, с которыми вы можете столкнуться, когда пытаетесь включить символы кавычек в строку. Если строка отделяется одинарными кавычками, вы не можете напрямую указать символ одинарной кавычки как часть строки, потому что для этой строки одинарная кавычка имеет особое значение — она завершает строку:

>>> print('This string contains a single quote (') character.')
SyntaxError: invalid syntax

Указание обратной косой черты перед символом кавычки в строке «экранирует» его и заставляет Python подавлять его обычное специальное значение. Затем он интерпретируется просто как буквальный символ одинарной кавычки:

>>> print('This string contains a single quote (\') character.')
This string contains a single quote (') character.

То же самое работает и в строке, разделенной двойными кавычками:

>>> print("This string contains a double quote (\") character.")
This string contains a double quote (") character.

Ниже приведена таблица escape-последовательностей, которые заставляют Python подавлять обычную специальную интерпретацию символа в строке:

Escape
последовательность
Обычная интерпретация
символов после обратной косой черты
«Экранированная» интерпретация
\'
Завершает строку открывающим разделителем в одинарных кавычках
Буквальный символ одинарной кавычки ( ')
\"
Завершает строку открывающим разделителем в двойных кавычках
Буквальный символ двойной кавычки ( ")
\newline
Завершает строку ввода
Новая строка игнорируется
\\
Добавляет escape-последовательность
Буквальный символ обратной косой черты ( \ )

 
Обычно ввод строки завершается символом новой строки. Таким образом, нажатие Enter в середине строки заставит Python думать, что она неполная:

>>> print('a

SyntaxError: EOL while scanning string literal

Чтобы разбить строку на более чем одну строку, добавьте обратную косую черту перед каждой новой строкой, и новые строки будут игнорироваться:

>>> print('a\
... b\
... c')
abc

Чтобы включить в строку буквальную обратную косую черту, закройте ее обратной косой чертой:

>>> print('foo\\bar')
foo\bar

Применение особого значения к символам

Затем предположим, что вам нужно создать строку, содержащую символ табуляции. Некоторые текстовые редакторы могут позволить вам вставить символ табуляции прямо в ваш код. Но многие программисты считают это плохой практикой по нескольким причинам:

  • Компьютер может различать символ табуляции и последовательность пробелов, но вы не можете. Для человека, читающего код, символы табуляции и пробела визуально неразличимы.
  • Некоторые текстовые редакторы настроены на автоматическое удаление символов табуляции путем расширения их до необходимого количества пробелов.
  • Некоторые среды Python REPL не вставляют вкладки в код.

В Python (и почти во всех других распространенных компьютерных языках) символ табуляции можно указать с помощью escape-последовательности \t:

>>> print('foo\tbar')
foo   bar

Управляющая последовательность \t заставляет символ t терять свое обычное значение, то есть буквального t. Вместо этого комбинация интерпретируется как символ табуляции.

Вот список escape-последовательностей, которые заставляют Python применять особое значение вместо буквальной интерпретации:

escape-последовательность
«Экранированная» интерпретация
\a
символ ASCII Bell ( BEL)
\b
символ ASCII Backspace ( BS)
\f
символ ASCII Formfeed ( FF)
\n
символ перевода строки ASCII ( LF)
\N {& lt; name & gt;}
Символ из базы данных Unicode с заданным <name>
\r
Символ возврата каретки ASCII ( CR)
\t
Символ горизонтальной табуляции ASCII ( TAB)
\uxxxx
Символ Юникода с 16-битным шестнадцатеричным значением xxxx
\Uxxxxxxxx
Символ Юникода с 32-битным шестнадцатеричным значением xxxxxxxx
\v
Символ вертикальной табуляции ASCII ( VT)
\ooo
Символ с восьмеричным значением ooo
\xhh
Символ с шестнадцатеричным значением hh

 
Например:

>>> print("a\tb")
a  b
>>> print("a\141\x61")
aaa
>>> print("a\nb")
a
b
>>> print('\u2192 \N{rightwards arrow}')
→ →

Этот тип escape-последовательности обычно используется для вставки символов, которые нелегко генерировать с клавиатуры или которые трудно читать или печатать.

Строки

A raw string literal is preceded by r or R, which specifies that escape sequences in the associated string are not translated. The backslash character is left in the string:

>>> print('foo\nbar')
foo
bar
>>> print(r'foo\nbar')
foo\nbar

>>> print('foo\\bar')
foo\bar
>>> print(R'foo\\bar')
foo\\bar

Строки в тройных кавычках

Есть еще один способ разграничения строк в Python. Строки в тройных кавычках ограничены соответствующими группами из трех одинарных или трех двойных кавычек. Escape‑последовательности по-прежнему работают в строках с тройными кавычками, но одиночные кавычки, двойные кавычки и символы новой строки могут быть включены без их выхода. Это обеспечивает удобный способ создания строки с одинарными и двойными кавычками:

>>> print('''This string has a single (') and a double (") quote.''')
This string has a single (') and a double (") quote.

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

>>> print("""This is a
string that spans
across several lines""")
This is a
string that spans
across several lines

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

Тип Boolean, логический контекст и «истинность»

Python 3 поддерживает тип Boolean (Логический). Объекты типа Boolean могут принимать только одно из двух значений, True (Истина) или False (Ложь):

>>> type(True)
<class 'bool'>
>>> type(False)
<class 'bool'>

В следующих уроках вы узнаете, что часто выражения в Python оцениваются в логическом контексте, что означает, что они интерпретируются, как Истина или Ложю. Значение, которое является истинным в булевом контексте, иногда называют «истиным», а значение, которое является ложным в булевом контексте, называют «ложным». (Вы также можете увидеть «ложь», записанную как «ложь».)

«Истинность» объекта типа Boolean очевидна: булевы объекты, равные True, являются истиной, а объекты, равные False, являются ложными. Но не-булевы объекты могут быть оценены также в булевом контексте и определены как истинные или ложные.

Вы узнаете больше об оценке объектов в логическом контексте, когда встретите логические операторы в следующем ууроке по операторам и выражениям в Python.

Встроенные функции

Python поддерживает множество встроенных функций, шестьдесят восемь, начиная с Python 3.6. Вы расскажете о многих из них в следующих обсуждениях, поскольку они встречаются в контексте.

Здесь приводится только краткий обзор, просто для того, чтобы почувствовать, насколько это просто. Подробнее читайте в документации Python по встроенным функциям. Многие из следующих описаний относятся к темам и концепциям, которые будут обсуждаться в будущих уровках.

Математика

Функция
Описание
abs()
Возвращает абсолютное значение числа
divmod()
Возвращает частное и остаток от целочисленного деления
max()
Возвращает самый большой из заданных аргументов или наибольший из итенрируемых элементов
min()
Возвращает самый маленький из заданных аргументов или наименьший из итенрируемых элементов
pow()
Возведение числа в степень
round()
Округление числа с плавающей точкой
sum()
Суммирует итерируемые элементы

Преобразование типов

Функция
Описание
ascii()
Возвращает строку, содержащую печатное представление объекта
bin()
Преобразует целое число в строку двоичного представления
bool()
Преобразует аргумент в логическое значение
chr()
Возвращает строковое представление символа, заданного целочисленным аргументом
complex()
Возвращает комплексное число, построенное из аргументов
float()
Возвращает объект с плавающей точкой, построенный из числа или строки
hex()
Преобразует целое число в строку с шестнадцатеричным представлением
int()
Возвращает целочисленный объект, построенный из числа или строки
oct()
Преобразует целое число в строку с восьмеричным представлением
ord()
Возвращает целочисленное представление (код) символа
repr()
Возвращает строку, содержащую печатное представление объекта
str()
Возвращает строковую версию объекта
type()
Возвращает тип объекта или создает объект нового типа

 

Итерируемость и итераторы

Функция
Описание
all()
Возвращает True if all elements of an iterable are true
any()
Возвращает True если какие-либо элементы итерируемого объекта истинны
enumerate()
Возвращает список кортежей, содержащих индексы и значения из итерируемого
filter()
Фильтрует элементы из итерируемого
iter()
Возвращает итератор объекта
len()
Возвращает длину объекта
map()
Применяет функцию к каждому элементу итерируемого
next()
Получает следующий элемент из итератора
range()
Создает диапазон целочисленных значений
reversed()
Возвращает итератор в обратном порядке
slice()
Возвращает часть объекта
Возвращает отсортированный список из итератора
Создает итератор, который объединяет элементы из итераций

 

Составной тип данных

Функция
Описание
bytearray()
Создаёт и возвращает объект класса bytearray
bytes()
Создаёт и возвращает объект класса bytes (похоже на bytearray, но неизменяемый)
dict()
Создаёт объект dict (словарь)
frozenset()
Создаёт объект frozenset
list()
Создаёт объект list (список)
object()
Создает новый неопределённый объект
set()
Создаёт объект set (набор)
tuple()
Создаёт объект tuple (кортеж)

Классы, атрибуты и наследование

Функция
Описание
classmethod()
Возвращает метод класса для функции
delattr()
Удаляет атрибуты объекта
getattr()
Возвращает значение указанного атрибута объекта
hasattr()
Возвращает True если у объекта есть указанный атрибут
isinstance()
Определяет, является ли объект экземпляром указанного класса
issubclass()
Определяет, является ли класс подклассом указанного класса
property()
Возвращаетзначение свойства класса
setattr()
Sets the value of a named attribute of an object
super()
Возвращает a proxy object that delegates method calls to a parent or sibling class

Ввод/Вывод

Функция
Описание
format()
Преобразует значение в форматированное представление
input()
Читает ввод с консоли
open()
Открывает файл и возвращает объект file
print()
Печатает текст в поток или на консоль

Переменные, ссылки и область действия

Функция
Описание
dir()
Возвращает список имен в текущей локальной области или список атрибутов объекта
globals()
Возвращает словарь, представляющий текущую глобальную таблицу символов
id()
Возвращает идентификатор объекта
locals()
Обновляет и возвращает словарь, представляющий текущую локальную таблицу символов
vars()
Возвращает __dict__ словарь атрибутов модуля, класса или объекта

Разное

Функция
Описание
callable()
Возвращает Trueесли объект кажется вызываемым
compile()
Компилирует исходный код в код или объект AST
Вычисляет выражение Python
exec()
Реализует динамическое выполнение кода Python
hash()
Возвращает хэш-значение объекта
help()
Вызывает встроенную справочную систему
memoryview()
Возвращает объект просмотра памяти
staticmethod()
Возвращает статический метод для функции
__import__()
вызывается оператором import

Заключение

В этом уроке вы узнали о встроенных типах данных и функциях Python.

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

Перейдите к следующему руководству, чтобы узнать о переменных Python.

Использованы материалы: Basic Data Types in Python

Опубликовано Вадим В. Костерин

ст. преп. кафедры ЦЭиИТ. Автор более 130 научных и учебно-методических работ. Лауреат ВДНХ (серебряная медаль).

Оставьте комментарий

Ваш адрес email не будет опубликован.