Теперь вы знаете, как взаимодействовать с интерпретатором Python и выполнять код Python. Пришло время копаться в языке Python. Сначала обсудим основные типы данных, встроенные в Python.
Что вы узнаете в этом уроке?
- Вы узнаете о нескольких базовых числовых, строковых и логических типах, встроенных в Python. К концу этого урока вы узнаете, как выглядят объекты этих типов и как их представлять..
- Вы также получите обзор встроенных функций Python. Это заранее написанные фрагменты кода, которые вы можете вызывать для выполнения полезных задач. Вы уже видели встроенную функцию
print()
, но есть много других.
Содержание
Целые
В Python 3 фактически нет ограничений на длину целочисленного значения. Конечно, он ограничен объемом памяти, который есть в вашей системе, как и все, но помимо этого целое число может быть настолько длинным, насколько это необходимо:
>>> print(123123123123123123123123123123123123123123123123 + 1) 123123123123123123123123123123123123123123123124
Python интерпретирует последовательность десятичных цифр без префикса как десятичное число:
>>> print(10) 10
К целочисленному значению может быть добавлен префикс, который указывает на основание системы счисления, отличное от 10:
0b
(ноль + маленький символ 'b'
)0B
(ноль + большой символ 'B'
)0o
(ноль + маленький символ 'o'
)0O
(ноль + большой символ 'O'
)0x
(ноль + маленький символ 'x'
)0X
(zero + ноль + большой символ 'X'
)Например:
>>> print(0o10) 8 >>> print(0x10) 16 >>> print(0b10) 2
Узнать о целочисленных значениях с недесятичной базой можно на сайте Википедии: Двоичная система счисленияએ, Восьмеричная система счисленияએ и Шестнадцатеричная система счисленияએ.
Базовый тип целого числа Python, независимо от базы, используемой для его определения, называется int
:
>>> type(10) <class 'int'> >>> type(0o10) <class 'int'> >>> type(0x10) <class 'int'>
print()
. Достаточно после приглашения >>>
ввести значение и нажать Enter, что-бы увидеть на экране:
>>> 10 10 >>> 0x10 16 >>> 0b10 2
Многие из примеров в этой серии руководств будут использовать эту функцию.
Обратите внимание, что это не работает внутри файла скрипта. Значение, появляющееся в строке в файле сценария само по себе, ничего не изменит.
Числа с плавающей точкой
Типом 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 подавлять обычную специальную интерпретацию символа в строке:
последовательность
символов после обратной косой черты
\'
'
)\"
"
)\newline
\\
\
)
Обычно ввод строки завершается символом новой строки. Таким образом, нажатие 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 применять особое значение вместо буквальной интерпретации:
\a
BEL
)\b
BS
)\f
FF
)\n
LF
)\N {& lt; name & gt;}
<name>
\r
CR
)\t
TAB
)\uxxxx
xxxx
\Uxxxxxxxx
xxxxxxxx
\v
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 trueany()
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()
super()
Ввод/Вывод
format()
input()
open()
print()
Переменные, ссылки и область действия
dir()
globals()
id()
locals()
vars()
__dict__
словарь атрибутов модуля, класса или объектаРазное
callable()
True
если объект кажется вызываемымcompile()
exec()
hash()
help()
memoryview()
staticmethod()
__import__()
import
Заключение
В этом уроке вы узнали о встроенных типах данных и функциях Python.
Все приведенные примеры манипулируют и отображают только постоянные значения. В большинстве программ вы обычно хотите создавать объекты, которые меняются в стоимости по мере выполнения программы.
Перейдите к следующему руководству, чтобы узнать о переменных Python.
Использованы материалы: Basic Data Types in Python