Основные типы данных в Python
Оглавление
- Целые числа
- Числа с плавающей точкой
- Комплексные числа
- Строки
- Булевский тип, булевский контекст и "истинность"
- Встроенные функции
- Заключение
Теперь вы знаете как взаимодействовать с интерпретатором Python и выполнять код Python. Пришло время углубиться в язык Python. Сначала мы обсудим основные типы данных, которые встроены в Python.
Вот что вы узнаете в этом уроке:
- Вы узнаете о нескольких основных числовых, строковых и булевых типах, которые встроены в Python. К концу этого урока вы будете знать, как выглядят объекты этих типов и как их представлять.
- Вы также получите представление о встроенных функциях Python. Это заранее написанные фрагменты кода, которые вы можете вызывать для выполнения полезных действий. Вы уже познакомились с встроенной
print()
функцией , но есть и множество других.
Целые числа
В Python 3 фактически нет ограничений на длину целочисленного значения. Конечно, оно ограничено объемом памяти, которым располагает ваша система, как и все остальное, но помимо этого целое число может быть настолько длинным, насколько вам нужно:
>>> print(123123123123123123123123123123123123123123123123 + 1)
123123123123123123123123123123123123123123123124
Python интерпретирует последовательность десятичных цифр без префикса как десятичное число:
>>> print(10)
10
Следующие строки могут быть добавлены к целому значению, чтобы указать основание, отличное от 10:
Prefix | Interpretation | Base |
---|---|---|
0b (zero + lowercase letter 'b' )0B (zero + uppercase letter 'B' ) |
Binary | 2 |
0o (zero + lowercase letter 'o' )0O (zero + uppercase letter 'O' ) |
Octal | 8 |
0x (zero + lowercase letter 'x' )0X (zero + uppercase letter 'X' ) |
Hexadecimal | 16 |
Например:
>>> print(0o10)
8
>>> print(0x10)
16
>>> print(0b10)
2
Для получения дополнительной информации о целых значениях с недесятичными основаниями см. следующие сайты Википедии: Двоичная, Восьмеричная и Шестидесятеричная.
Базовый тип целого числа в Python, независимо от базы, используемой для его задания, называется int
:
>>> type(10)
<class 'int'>
>>> type(0o10)
<class 'int'>
>>> type(0x10)
<class 'int'>
Примечание: Самое время упомянуть, что если вы хотите вывести значение на экран в сеансе REPL, вам не нужно использовать функцию 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, не понимая их на таком уровне, поэтому не волнуйтесь, если это покажется вам слишком сложным. Информация представлена здесь на случай, если вам интересно.
Почти все платформы представляют значения с плавающей точкой в Python как 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). Большинство десятичных дробей не могут быть точно представлены в виде двоичных дробей, поэтому в большинстве случаев внутреннее представление числа с плавающей точкой является приближением к фактическому значению. На практике разница между фактическим и представленным значением очень мала и обычно не вызывает серьезных проблем.
Дальнейшее чтение: Дополнительную информацию о представлении данных с плавающей точкой в Python и возможных подводных камнях можно найти в Floating Point Arithmetic: Issues and Limitations в документации по Python.
Комплексные числа
Комплексные числа задаются как <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.
Последовательности в строках
Иногда требуется, чтобы 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.
Ниже приведена таблица управляющих последовательностей, которые заставляют Python подавлять обычную специальную интерпретацию символа в строке:
Escape Sequence |
Usual Interpretation of Character(s) After Backslash |
“Escaped” Interpretation |
---|---|---|
\' |
Terminates string with single quote opening delimiter | Literal single quote (' ) character |
\" |
Terminates string with double quote opening delimiter | Literal double quote (" ) character |
\<newline> |
Terminates input line | Newline is ignored |
\\ |
Introduces escape sequence | Literal backslash (\ ) character |
Обычно символ новой строки завершает ввод строки. Поэтому нажатие Enter в середине строки заставит Python подумать, что она не завершена:
>>> print('a
SyntaxError: EOL while scanning string literal
Чтобы разбить строку на более чем одну строку, включите обратную косую черту перед каждой новой строкой, и новые строки будут игнорироваться:
>>> print('a\
... b\
... c')
abc
Чтобы включить в строку литеральную обратную косую черту, выделите ее обратной косой чертой:
>>> print('foo\\bar')
foo\bar
Придание специального значения символам
Далее, предположим, вам нужно создать строку, содержащую символ табуляции. Некоторые текстовые редакторы могут позволить вам вставить символ табуляции непосредственно в ваш код. Но многие программисты считают это плохой практикой по нескольким причинам:
- Компьютер может отличить символ табуляции от последовательности символов пробела, а вы - нет. Для человека, читающего код, символы табуляции и пробела визуально неразличимы.
- Некоторые текстовые редакторы настроены на автоматическое удаление символов табуляции, расширяя их до соответствующего количества пробелов.
- Некоторые среды Python REPL не будут вставлять табуляции в код.
В Python (и почти во всех других распространенных компьютерных языках) символ табуляции можно задать с помощью управляющей последовательности \t
:
>>> print('foo\tbar')
foo bar
Последовательность, которую можно перевести как \t
, приводит к тому, что символ t
теряет свое обычное значение - буквальное t
. Вместо этого комбинация интерпретируется как символ табуляции.
Вот список управляющих последовательностей, которые заставляют Python применять специальное значение вместо буквальной интерпретации:
Escape Sequence | “Escaped” Interpretation |
---|---|
\a |
ASCII Bell (BEL ) character |
\b |
ASCII Backspace (BS ) character |
\f |
ASCII Formfeed (FF ) character |
\n |
ASCII Linefeed (LF ) character |
\N{<name>} |
Character from Unicode database with given <name> |
\r |
ASCII Carriage Return (CR ) character |
\t |
ASCII Horizontal Tab (TAB ) character |
\uxxxx |
Unicode character with 16-bit hex value xxxx |
\Uxxxxxxxx |
Unicode character with 32-bit hex value xxxxxxxx |
\v |
ASCII Vertical Tab (VT ) character |
\ooo |
Character with octal value ooo |
\xhh |
Character with hex value hh |
Примеры:
>>> print("a\tb")
a b
>>> print("a\141\x61")
aaa
>>> print("a\nb")
a
b
>>> print('\u2192 \N{rightwards arrow}')
→ →
Этот тип управляющей последовательности обычно используется для вставки символов, которые не могут быть легко сгенерированы с клавиатуры или не могут быть легко прочитаны или напечатаны.
Сырые строки
Перед литералом необработанной строки ставится r
или R
, что указывает на то, что управляющие последовательности в связанной строке не транслируются. Символ обратной косой черты оставляется в строке:
>>> print('foo\nbar')
foo
bar
>>> print(r'foo\nbar')
foo\nbar
>>> print('foo\\bar')
foo\bar
>>> print(R'foo\\bar')
foo\\bar
Строки с тройными кавычками
В Python существует еще один способ разграничения строк. Строки, заключенные в тройные кавычки, разграничиваются соответствующими группами из трех одинарных или трех двойных кавычек. Последовательности экранирования по-прежнему работают в строках с тройными кавычками, но одинарные кавычки, двойные кавычки и новые строки можно включать без экранирования. Это позволяет создать строку, содержащую как одинарные, так и двойные кавычки:
>>> 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 предоставляет тип данных Boolean. Объекты типа Boolean могут иметь одно из двух значений, True
или False
:
>>> type(True)
<class 'bool'>
>>> type(False)
<class 'bool'>
Как вы увидите в следующих уроках, выражения в Python часто оцениваются в булевом контексте, то есть они интерпретируются как истина или ложь. Значение, которое является истинным в булевом контексте, иногда называют "правдивым", а значение, которое является ложным в булевом контексте, - "ложным". (Вы также можете встретить написание "falsy" как "falsey")
"Истинность" объекта булева типа очевидна: Булевы объекты, равные True
, являются истинными (true), а равные False
- ложными (false). Но и небулевы объекты могут быть оценены в булевом контексте и определены как истинные или ложные.
Вы узнаете больше об оценке объектов в булевом контексте, когда столкнетесь с логическими операторами в предстоящем уроке по операторам и выражениям в Python.
Встроенные функции
Интерпретатор Python поддерживает множество встроенных функций: шестьдесят восемь, начиная с Python 3.6. О многих из них вы узнаете из следующих обсуждений, когда они будут появляться в контексте.
На данный момент мы приводим краткий обзор, чтобы дать представление о том, что доступно. Более подробная информация содержится в документации по встроенным функциям в Python. Многие из следующих описаний относятся к темам и концепциям, которые будут рассмотрены в будущих учебниках.
Математика
Function | Description |
---|---|
abs() |
Returns absolute value of a number |
divmod() |
Returns quotient and remainder of integer division |
max() |
Returns the largest of the given arguments or items in an iterable |
min() |
Returns the smallest of the given arguments or items in an iterable |
pow() |
Raises a number to a power |
round() |
Rounds a floating-point value |
sum() |
Sums the items of an iterable |
Преобразование типов
Function | Description |
---|---|
ascii() |
Returns a string containing a printable representation of an object |
bin() |
Converts an integer to a binary string |
bool() |
Converts an argument to a Boolean value |
chr() |
Returns string representation of character given by integer argument |
complex() |
Returns a complex number constructed from arguments |
float() |
Returns a floating-point object constructed from a number or string |
hex() |
Converts an integer to a hexadecimal string |
int() |
Returns an integer object constructed from a number or string |
oct() |
Converts an integer to an octal string |
ord() |
Returns integer representation of a character |
repr() |
Returns a string containing a printable representation of an object |
str() |
Returns a string version of an object |
type() |
Returns the type of an object or creates a new type object |
Переменные и итераторы
Function | Description |
---|---|
all() |
Returns True if all elements of an iterable are true |
any() |
Returns True if any elements of an iterable are true |
enumerate() |
Returns a list of tuples containing indices and values from an iterable |
filter() |
Filters elements from an iterable |
iter() |
Returns an iterator object |
len() |
Returns the length of an object |
map() |
Applies a function to every item of an iterable |
next() |
Retrieves the next item from an iterator |
range() |
Generates a range of integer values |
reversed() |
Returns a reverse iterator |
slice() |
Returns a slice object |
sorted() |
Returns a sorted list from an iterable |
zip() |
Creates an iterator that aggregates elements from iterables |
Композитный тип данных
Function | Description |
---|---|
bytearray() |
Creates and returns an object of the bytearray class |
bytes() |
Creates and returns a bytes object (similar to bytearray , but immutable) |
dict() |
Creates a dict object |
frozenset() |
Creates a frozenset object |
list() |
Creates a list object |
object() |
Creates a new featureless object |
set() |
Creates a set object |
tuple() |
Creates a tuple object |
Классы, атрибуты и наследование
Function | Description |
---|---|
classmethod() |
Returns a class method for a function |
delattr() |
Deletes an attribute from an object |
getattr() |
Returns the value of a named attribute of an object |
hasattr() |
Returns True if an object has a given attribute |
isinstance() |
Determines whether an object is an instance of a given class |
issubclass() |
Determines whether a class is a subclass of a given class |
property() |
Returns a property value of a class |
setattr() |
Sets the value of a named attribute of an object |
super() |
Returns a proxy object that delegates method calls to a parent or sibling class |
Ввод/вывод
Function | Description |
---|---|
format() |
Converts a value to a formatted representation |
input() |
Reads input from the console |
open() |
Opens a file and returns a file object |
print() |
Prints to a text stream or the console |
Переменные, ссылки и область применения
Function | Description |
---|---|
dir() |
Returns a list of names in current local scope or a list of object attributes |
globals() |
Returns a dictionary representing the current global symbol table |
id() |
Returns the identity of an object |
locals() |
Updates and returns a dictionary representing current local symbol table |
vars() |
Returns __dict__ attribute for a module, class, or object |
Разное
Function | Description |
---|---|
callable() |
Returns True if object appears callable |
compile() |
Compiles source into a code or AST object |
eval() |
Evaluates a Python expression |
exec() |
Implements dynamic execution of Python code |
hash() |
Returns the hash value of an object |
help() |
Invokes the built-in help system |
memoryview() |
Returns a memory view object |
staticmethod() |
Returns a static method for a function |
__import__() |
Invoked by the import statement |
Заключение
В этом уроке вы узнали о встроенных типах данных и функциях, которые предоставляет Python.
Все приведенные до сих пор примеры манипулировали и отображали только постоянные значения. В большинстве программ обычно требуется создавать объекты, значение которых меняется по мере выполнения программы.
Перейдите к следующему уроку, чтобы узнать о переменных Python.
Вернуться на верх