Теперь вы знаете, как взаимодействовать с интерпретатором 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)\uxxxxxxxx\Uxxxxxxxxxxxxxxxx\v VT)\oooooo\xhhhh
Например:
>>> 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()bytearraybytes()bytes (похоже на bytearray, но неизменяемый)dict()dict (словарь)frozenset()frozensetlist()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