Основные типы данных в 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 |
---|---|---|
|
двоичный |
2 |
|
восьмеричный |
8 |
|
шестнадцатеричный |
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, не понимая их до этого уровня, так что не беспокойтесь, если это кажется слишком сложным. Информация представлена здесь, если вам интересно.
Почти все платформы представляют значения Python
float
как 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 подавлять обычную специальную интерпретацию символа в строке:
Выход из последовательности |
Обычная интерпретация символа (ов) после обратной косой черты |
«Сбежавшая» интерпретация |
---|---|---|
|
Завершает строку открывающим разделителем в одинарных кавычках |
Буквальная одинарная кавычка ( |
|
Завершает строку открывающим разделителем в двойных кавычках |
Буквальная двойная кавычка ( |
|
Завершает строку ввода |
Новая строка игнорируется |
|
Вводит 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-последовательность | «Сбежавшая» интерпретация |
---|---|
|
Символ ASCII Bell ( |
|
ASCII Backspace ( |
|
ASCII Formfeed ( |
|
Символ перевода строки ASCII ( |
|
Символ из базы данных Unicode с заданным |
|
Символ возврата каретки ASCII ( |
|
Символ горизонтальной табуляции ASCII ( |
|
Символ Юникода с 16-битным шестнадцатеричным значением |
|
Символ Юникода с 32-битным шестнадцатеричным значением |
|
Символ вертикальной табуляции ASCII ( |
|
Знак с восьмеричным значением |
|
Символ с шестнадцатеричным значением |
Примеры:
>>>
>>> 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
функция | Описание |
---|---|
|
Возвращает абсолютное значение числа. |
|
Возвращает частное и остаток от целочисленного деления. |
|
Возвращает наибольший из заданных аргументов или элементов в итерируемом объекте. |
|
Возвращает наименьший из заданных аргументов или элементов в итерируемом объекте. |
|
Возводит число в степень |
|
Округляет значение с плавающей запятой |
|
Суммирует элементы итерируемого |
Преобразование типов
функция | Описание |
---|---|
|
Возвращает строку, содержащую печатное представление объекта. |
|
Преобразует целое число в двоичную строку |
|
Преобразует аргумент в логическое значение |
|
Возвращает строковое представление символа, заданного целочисленным аргументом |
|
Возвращает комплексное число, составленное из аргументов. |
|
Возвращает объект с плавающей запятой, созданный из числа или строки |
|
Преобразует целое число в шестнадцатеричную строку |
|
Возвращает целочисленный объект, состоящий из числа или строки. |
|
Преобразует целое число в восьмеричную строку |
|
Возвращает целочисленное представление символа. |
|
Возвращает строку, содержащую печатное представление объекта. |
|
Возвращает строковую версию объекта |
|
Возвращает тип объекта или создает объект нового типа |
Итерируемые и итераторы
функция | Описание |
---|---|
|
Возвращает |
|
Возвращает |
|
Возвращает список кортежей, содержащих индексы и значения из итерируемого |
|
Фильтрует элементы из итерируемого |
|
Возвращает объект итератора |
|
Возвращает длину объекта. |
|
Применяет функцию к каждому элементу итерации |
|
Получает следующий элемент из итератора |
|
Создает диапазон целочисленных значений |
|
Возвращает обратный итератор |
|
Возвращает объект |
|
Возвращает отсортированный список из итерируемого |
|
Создает итератор, который объединяет элементы из итераций |
Составной тип данных
функция | Описание |
---|---|
|
Создает и возвращает объект класса |
|
Создает и возвращает объект |
|
Создает объект |
|
Создает объект |
|
Создает объект |
|
Возвращает новый объект без признаков |
|
Создает объект |
|
Создает объект |
Классы, Атрибуты и Наследование
функция | Описание |
---|---|
|
Возвращает метод класса для функции |
|
Удаляет атрибут из объекта |
|
Возвращает значение именованного атрибута объекта. |
|
Возвращает |
|
Определяет, является ли объект экземпляром данного класса |
|
Определяет, является ли класс подклассом данного класса |
|
Возвращает значение свойства класса |
|
Устанавливает значение именованного атрибута объекта |
|
Возвращает прокси-объект, который делегирует вызовы методов родительскому классу или классу-брату. |
Input/Output
функция | Описание |
---|---|
|
Преобразует значение в форматированное представление |
|
Читает ввод с консоли |
|
Открывает файл и возвращает файловый объект |
|
Печать в текстовый поток или консоль |
Переменные, ссылки и область действия
функция | Описание |
---|---|
|
Возвращает список имен в текущей локальной области или список атрибутов объекта |
|
Возвращает словарь, представляющий текущую глобальную таблицу символов |
|
Возвращает идентичность объекта |
|
Обновляет и возвращает словарь, представляющий текущую локальную таблицу символов |
|
Возвращает атрибут |
Разнообразный
функция | Описание |
---|---|
|
Возвращает |
|
Компилирует исходный код в код или объект AST |
|
Оценивает выражение Python |
|
Реализует динамическое выполнение кода Python |
|
Возвращает хеш-значение объекта |
|
Вызывает встроенную справочную систему |
|
Возвращает объект представления памяти |
|
Возвращает статический метод для функции |
|
Вызывается оператором |
Заключение
В этом руководстве вы узнали о встроенных в Pythondata types иfunctions.
Все приведенные примеры манипулируют и отображают только постоянные значения. В большинстве программ вы обычно хотите создавать объекты, которые меняются в стоимости по мере выполнения программы.
Перейдите к следующему руководству, чтобы узнать о Pythonvariables.
__ Take the Quiz: Проверьте свои знания с помощью интерактивной викторины «Основные типы данных в Python». По окончании вы получите оценку, чтобы вы могли отслеживать прогресс в обучении с течением времени: