Основные типы данных в Python

Основные типы данных в Python

Теперь вы знаетеhow to interact with the Python interpreter and execute Python code. Пришло время копаться в языке Python. Сначала обсудим основные типы данных, встроенные в Python.

Вот что вы узнаете из этого руководства:

  • Вы узнаете о нескольких основных типахnumeric, string иBoolean, встроенных в Python. К концу этого урока вы узнаете, как выглядят объекты этих типов и как их представлять.

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

Бесплатная загрузка PDF: Шпаргалка по Python 3

__ Take the Quiz: Проверьте свои знания с помощью интерактивной викторины «Основные типы данных в Python». По окончании вы получите оценку, чтобы вы могли отслеживать прогресс в обучении с течением времени:

Целые

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

>>>

>>> print(123123123123123123123123123123123123123123123123 + 1)
123123123123123123123123123123123123123123123124

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

>>>

>>> print(10)
10

Следующие строки могут быть добавлены к целочисленному значению для указания основания, отличного от 10:

Приставка интерпретация Base

0b (ноль + строчная буква'b')
0B (ноль + прописная буква'B')

двоичный

2

0o (ноль + строчная буква'o')
0O (ноль + прописная буква'O')

восьмеричный

8

0x (ноль + строчная буква'x')
0X (ноль + прописная буква'X')

шестнадцатеричный

16

Например:

>>>

>>> print(0o10)
8

>>> print(0x10)
16

>>> print(0b10)
2

Дополнительные сведения о целочисленных значениях с недесятичным основанием см. На следующих сайтах Википедии:Binary,Octal иHexadecimal.

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

>>>

>>> type(10)

>>> type(0o10)

>>> type(0x10)

Note: Сейчас самое время упомянуть, что если вы хотите отобразить значение во время сеанса REPL, вам не нужно использовать функциюprint(). Просто введите значение в приглашении>>> и нажмите[.kbd .key-enter]#Enter #, чтобы отобразить его:

>>>

>>> 10
10
>>> 0x10
16
>>> 0b10
2

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

Обратите внимание, что это не работает внутри файла скрипта. Значение, появляющееся в строке в файле сценария само по себе, ничего не изменит.

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

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

>>>

>>> 4.2
4.2
>>> type(4.2)

>>> 4.
4.0
>>> .2
0.2

>>> .4e7
4000000.0
>>> type(.4e7)

>>> 4.2e-4
0.00042

Глубокое погружение: представление с плавающей точкой

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

Почти все платформы представляют значения Pythonfloat как 64-битные значения «двойной точности» в соответствии со стандартом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

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

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

Сложные числа

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

>>>

>>> 2+3j
(2+3j)
>>> type(2+3j)

Струны

Строки - это последовательности символьных данных. Тип строки в Python называетсяstr.

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

>>>

>>> print("I am a string.")
I am a string.
>>> type("I am a string.")


>>> print('I am too.')
I am too.
>>> type('I am too.')

Строка в 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 подавлять обычную специальную интерпретацию символа в строке:

Выход из последовательности
Обычная интерпретация символа (ов)
после обратной косой черты
«Сбежавшая» интерпретация

\'

Завершает строку открывающим разделителем в одинарных кавычках

Буквальная одинарная кавычка (') символ

\"

Завершает строку открывающим разделителем в двойных кавычках

Буквальная двойная кавычка (") символ

\newline

Завершает строку ввода

Новая строка игнорируется

\\

Вводит escape-последовательность

Буквальный символ обратной косой черты (\)

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

>>>

>>> print('a

SyntaxError: EOL while scanning string literal

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

>>>

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

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

>>>

>>> print('foo\\bar')
foo\bar
Применение особого значения к персонажам

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

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

  • Некоторые текстовые редакторы настроены на автоматическое удаление символов табуляции путем расширения их до соответствующего количества пробелов.

  • Некоторые среды Python REPL не вставляют вкладки в код.

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

>>>

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

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

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

Escape-последовательность «Сбежавшая» интерпретация

\a

Символ ASCII Bell (BEL)

\b

ASCII Backspace (BS) символ

\f

ASCII Formfeed (FF) символ

\n

Символ перевода строки ASCII (LF)

\N{}

Символ из базы данных Unicode с заданным<name>

\r

Символ возврата каретки ASCII (CR)

\t

Символ горизонтальной табуляции ASCII (TAB)

\uxxxx

Символ Юникода с 16-битным шестнадцатеричным значениемxxxx

\Uxxxxxxxx

Символ Юникода с 32-битным шестнадцатеричным значениемxxxxxxxx

\v

Символ вертикальной табуляции ASCII (VT)

\oxx

Знак с восьмеричным значениемxx

\xhh

Символ с шестнадцатеричным значениемhh

Примеры:

>>>

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

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

Сырые строки

Необработанному строковому литералу предшествуетr илиR, который указывает, что escape-последовательности в связанной строке не переводятся. Символ обратной косой черты остается в строке:

>>>

>>> 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.

Булев тип, булев контекст и «истина»

Python 3 предоставляет логический тип данных. Объекты логического типа могут иметь одно из двух значений:True илиFalse:

>>>

>>> type(True)

>>> type(False)

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

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

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

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

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

На данный момент, краткий обзор следует, просто чтобы почувствовать, что доступно. См.Python documentation on built-in functions для более подробной информации. Многие из следующих описаний относятся к темам и концепциям, которые будут обсуждаться в будущих руководствах.

Math

функция Описание

abs()

Возвращает абсолютное значение числа.

divmod()

Возвращает частное и остаток от целочисленного деления.

max()

Возвращает наибольший из заданных аргументов или элементов в итерируемом объекте.

min()

Возвращает наименьший из заданных аргументов или элементов в итерируемом объекте.

pow()

Возводит число в степень

round()

Округляет значение с плавающей запятой

sum()

Суммирует элементы итерируемого

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

функция Описание

ascii()

Возвращает строку, содержащую печатное представление объекта.

bin()

Преобразует целое число в двоичную строку

bool()

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

chr()

Возвращает строковое представление символа, заданного целочисленным аргументом

complex()

Возвращает комплексное число, составленное из аргументов.

float()

Возвращает объект с плавающей запятой, созданный из числа или строки

hex()

Преобразует целое число в шестнадцатеричную строку

int()

Возвращает целочисленный объект, состоящий из числа или строки.

oct()

Преобразует целое число в восьмеричную строку

ord()

Возвращает целочисленное представление символа.

repr()

Возвращает строку, содержащую печатное представление объекта.

str()

Возвращает строковую версию объекта

type()

Возвращает тип объекта или создает объект нового типа

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

функция Описание

all()

ВозвращаетTrue, если все элементы итерации верны

any()

ВозвращаетTrue, если какие-либо элементы итерации верны

enumerate()

Возвращает список кортежей, содержащих индексы и значения из итерируемого

filter()

Фильтрует элементы из итерируемого

iter()

Возвращает объект итератора

len()

Возвращает длину объекта.

map()

Применяет функцию к каждому элементу итерации

next()

Получает следующий элемент из итератора

range()

Создает диапазон целочисленных значений

reversed()

Возвращает обратный итератор

slice()

Возвращает объектslice

sorted()

Возвращает отсортированный список из итерируемого

zip()

Создает итератор, который объединяет элементы из итераций

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

функция Описание

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()

Устанавливает значение именованного атрибута объекта

super()

Возвращает прокси-объект, который делегирует вызовы методов родительскому классу или классу-брату.

Input/Output

функция Описание

format()

Преобразует значение в форматированное представление

input()

Читает ввод с консоли

open()

Открывает файл и возвращает файловый объект

print()

Печать в текстовый поток или консоль

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

функция Описание

dir()

Возвращает список имен в текущей локальной области или список атрибутов объекта

globals()

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

id()

Возвращает идентичность объекта

locals()

Обновляет и возвращает словарь, представляющий текущую локальную таблицу символов

vars()

Возвращает атрибут__dict__ для модуля, класса или объекта

Разнообразный

функция Описание

callable()

ВозвращаетTrue, если объект кажется вызываемым

compile()

Компилирует исходный код в код или объект AST

eval()

Оценивает выражение Python

exec()

Реализует динамическое выполнение кода Python

hash()

Возвращает хеш-значение объекта

help()

Вызывает встроенную справочную систему

memoryview()

Возвращает объект представления памяти

staticmethod()

Возвращает статический метод для функции

__import__()

Вызывается операторомimport

Заключение

В этом руководстве вы узнали о встроенных в Pythondata types иfunctions.

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

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

__ Take the Quiz: Проверьте свои знания с помощью интерактивной викторины «Основные типы данных в Python». По окончании вы получите оценку, чтобы вы могли отслеживать прогресс в обучении с течением времени: