Типы данных
Типы сообщают о поведении и характеристиках объекта в Python. Тип предоставляет интерпретатору информацию о значениях, которые разрешено иметь объекту, и различных операциях, которые можно выполнять с этим конкретным типом объекта. Python имеет динамическую типизацию, поэтому нет необходимости явно определять тип переменной. Динамически типизированные относятся к значениям времени выполнения, имеющим тип, и что тип переменной может измениться во время этого времени выполнения. В других языках программирования со статической типизацией большое внимание уделяется типу значения, присваиваемого определенной переменной.
В Python существует 5 примитивных типов, используемых для представления значений: целые числа, числа с плавающей запятой, логические значения, строки и NoneType (указывающий отсутствие значения). Каждый из типов примитивов обладает различными атрибутами, обеспечивающими уникальную функциональность. Примитивные типы — это предопределенные в языке объекты, из которых состоят все остальные дополнительные типы. Например, в китайском языке определенные предложения будут построены в зависимости от конкретной комбинации используемых символов. Тип также может быть определен явно:
explicitly_defined_type: int = 1
print(explicitly_defined_type)
>>> 1
Python поддерживает несколько дополнительных типов, помимо 5 примитивных типов, а также утилиты для выполнения операций и управления этими объектными данными. Таблица всех типов в Python показана ниже.
Типы
Python предоставляет набор примитивных типов данных, описанных в таблице ниже. В первом столбце указано общее имя базового типа данных, во втором столбце указан синтаксический тип в Python, в третьем столбце указано, является ли тип объекта данных изменяемым или нет, а в четвертом столбце приведены примеры каждого из типов:
Вы также можете создавать свои собственные типы данных, отличные от основных, предоставляемых Python.
Использование функции Type()
Каждый объект данных значения в Python имеет тип, который вы можете проверить с помощью предопределенной функции Python, type()
. Если вы когда-нибудь не уверены, какой тип переменной или значения, просто используйте это ключевое слово для проверки:
print(type('Hello World'))
print(type(1))
print(type(1.0))
print(type(True))
>>> <class 'str'> >>> <class 'int'> >>> <class 'float'> >>> <class 'bool'>
Выходные данные <class ‘type’>
представляют категорию типа, с которым связано значение. Когда вы имеете дело с большими кодовыми базами или программами, обычно проверяют тип переменной или значения, поскольку они содержат множество различных определенных переменных.
Целые числа
В Python объекты, являющиеся целыми числами, типа int
, представляют положительные и отрицательные действительные целые числа. Например, целые числа состоят из таких цифр, как -1, 0, 1, 100, -1000
:
print(type(-1))
print(type(0))
print(type(1))
print(type(100))
print(type(-1000))
>>> <class 'int'> >>> <class 'int'> >>> <class 'int'> >>> <class 'int'> >>> <class 'int'>
В Python большие целые числа, 10100
, не могут быть разделены запятыми, как в математике, 10 100. Запятые между числами, 10,100
, означают для Python, что объект данных является кортежем, а символы подчеркивания могут использоваться для представления больших целых чисел 10_100
. Подчеркивания используются только для удобства чтения кода:
tuple_with_commas = 10,100 integer_with_underscores = 10_100
print(tuple_with_commas) print(type(tuple_with_commas))
print(integer_with_underscores) print(type(integer_with_underscores))
>>> (10, 100) >>> <class 'tuple'> >>> 10100 >>> <class 'int'>
Целочисленные значения не могут иметь 0
, за которым непосредственно следует другая цифра, 5
, без возникновения ошибки:
print(01)
>>> SyntaxError: leading zeros in decimal integer literals are not >>> permitted; use an 0o prefix for octal integers
Вы можете указать отрицательное целое число, поместив -
перед цифрой 1
:
print(-1)
>>> -1
Размещение +
перед цифрой 1
приводит к тому же положительному целому числу, что и простое использование самой цифры без знака:
print(+1)
>>> 1
Вы можете выполнять несколько различных математических операций с целыми числами, таких как сложение, вычитание, умножение и т. д.:
int_one = 1 int_two = 2
add_two_ints = int_one + int_two
multiply_two_ints = int_one * int_two
subtract_two_ints = int_one - int_two
print(add_two_ints) print(type(add_two_ints))
print(multiply_two_ints) print(type(multiply_two_ints))
print(subtract_two_ints) print(type(subtract_two_ints))
>>> 3 >>> <class 'int'> >>> 2 >>> <class 'int'> >>> -1 >>> <class 'int'>
Дополнительные операции будут рассмотрены в следующей части. В зависимости от значения целого числа оно будет занимать разное количество памяти, начиная с 24 байт.
Числа с плавающей запятой
В Python объекты, представляющие собой числа с плавающей запятой, типа float
, имеют значения, ссылающиеся на положительные и отрицательные десятичные числа, а также на рациональные числа. Примеры поплавков: 1.0
, -5.0
и 1.111111
.
float_one = 1.0 float_two = -5.0 float_three = 1.111111
float_one_type = type(float_one) float_two_type = type(float_two) float_three_type = type(float_three)
print(float_one_type) print(float_two_type) print(float_three_type)
>>> <class 'float'> >>> <class 'float'> >>> <class 'float'>
Если бы вам нужно было разделить два целых числа 1 и 1, ожидали бы вы получить целое число 1? В Python при делении двух целых чисел вместо этого остается число с плавающей запятой.
int_one = 1 int_two = 1
divide_two_ints = int_one / int_two
print(divide_two_ints)
>>> 1.0
Разделив целое число 1
на число с плавающей запятой 1.0
, вы получите тот же результирующий тип числа с плавающей запятой:
int_one = 1 float_one = 1.0
divide_int_by_float = int_one / float_one
print(divide_int_by_float) print(type(divide_int_by_float))
>>> 1.0 >>> <class 'float'>
Переменная int_one
представляет тип объекта данных, отличный от переменных float_one
и divide_int_by_float
. Почти любое вычисление или операцию, которые можно выполнить над целым числом, можно выполнить и над числом с плавающей запятой:
int_one = 2 int_two = 2
float_one = 2.0 float_two = 2.0
add_two_ints = int_one + int_two
add_two_floats = float_one + float_two
print(add_two_ints)
print(add_two_floats)
>>> 4 >>> 4.0
В Python числа с плавающей запятой занимают 24 байта памяти, состоящей из базового значения двойной точности, указателя на тип объекта и счетчика ссылок. Поплавки позволяют присваивать переменным точные значения с большими десятичными знаками:
high_decimal_value = 3.141592653589793
print(high_decimal_value)
>>> 3.141592653589793
Комплексные числа
В Python комплексные числа — это тип данных, состоящий из действительных и мнимых чисел, и возникающий при нахождении квадратного корня из отрицательного числа. Python следует соглашению по электротехнике, используя j
для обозначения комплексных чисел вместо i
, которое обычно используется в математике. Комплексные числа представлены в виде a + bj
. Квадратный корень из -1
будет представлен как 1j
в Python. Вы можете проверить, что тип сложного числа 1 +
1j
:
a = 1
b = 1j
print(a + b)
print(type(a + b))
>>> (1+1j) >>> <class 'complex'>
Python также имеет встроенную функцию, используемую для реализации комплексных чисел, complex()
. Функция complex()
принимает два числа, одно действительное и одно мнимое, и выводит комплексное число:
a = 1 b = 3
complex_number = complex(a, b)
print(complex_number) print(type(complex_number)) >>> (1+3j) >>> <class 'complex'>
Комплексные числа в Python представлены 32 байтами памяти.
Булевы значения
В Python тип данных Boolean (bool
) действует как логический оператор, представляющий два значения: True
или False
. Первая буква, T
или F
, всегда заглавная. Проверьте типы True
и False
:
print(type(True)) print(type(False))
>>> <class 'bool'> >>> <class 'bool'>
Логические объекты данных обычно используются для сравнения или если логика выражения верна. Проверить, больше ли одно число 2, чем другое число 1. Вычисляется как True
:
first_number = 2 second_number = 1
greater_than = first_number > second_number
print(greater_than) print(type(greater_than))
>>> True >>> <class 'bool'>
Оценивается как False
:
first_number = 1 second_number = 2
greater_than = first_number > second_number
print(greater_than) print(type(greater_than))
>>> False >>> <class 'bool'>
Струны
В Python тип данных String (str
) состоит из последовательности символов, заключенных либо в одинарные, ‘’
, либо в двойные, “”
, кавычки:
string_with_single_quotes = 'Single quotes'
string_with_double_quotes = "Double quotes"
print(string_with_single_quotes)
print(string_with_double_quotes)
>>> Single quotes >>> Double quotes
Кавычки должны быть согласованными, а одинарные и двойные кавычки нельзя использовать вместе для формирования строки. Например, строка не может быть сформирована с использованием ‘my_string”
или “my_string’
без возникновения синтаксической ошибки:
mixed_quotes_one = 'my_string"
mixed_quotes_two = "my_string'
print(mixed_quotes_one)
print(mixed_quotes_two)
>>> SyntaxError: EOL while scanning string literal
Хотя одинарные и двойные кавычки могут использоваться друг в друге:
single_inside_double = "'Single quotes inside double quotes'"
double_inside_single = '"Double quotes inside single quotes"'
print(single_inside_double)
print(double_inside_single)
>>> 'Single quotes inside double quotes' >>> "Double quotes inside single quotes"
Строки могут состоять только из одного символа клавиатуры:
single_character = 's'
print(single_character)
>>> s
Состоят из нескольких разных слов, образующих предложение:
multiple_words = 'This string has many different words.'
print(multiple_words)
>>> This string has many different words.
Или даже просто пустое место:
empty_string = ''
print(empty_string)
>>>
В первых принципах Python, часть 1, вы уже напечатали строку ‘Hello World’
:
print('Hello World')
>>> Hello World
Со строками можно выполнять множество различных манипуляций и операций, которые будут рассмотрены в следующей части.
НетТип
В Python вы можете присвоить специальное значение None
, которое имеет тип NoneType
, переменной, если вы хотите оставить ее пустой. Проверьте тип None
:
print(type(None))
>>> <class 'NoneType'>
Присвойте None
переменной non_type
, распечатайте значение и введите его в терминал:
none_type = None
print(none_type) print(type(none_type))
>>> None >>> <class 'NoneType'>
Преобразование типа
Вы можете изменить тип или преобразование типа значения объекта данных, используя функцию ключевого слова типа, такую как int()
, bool()
, float()
, str()
и т. д., поскольку python динамически типизируется. В других языках программирования со статической типизацией переменная не может изменить свой тип после ее определения.
Использование int() для преобразования типа числа с плавающей запятой усекает десятичную точку и сохраняет первую цифру целого числа:
float_to_int_1 = int(1.9) float_to_int_2 = int(100.1) float_to_int_3 = int(3.14) float_to_int_4 = int(1.0e2)
print(float_to_int_1) print(type(float_to_int_1))
print(float_to_int_2) print(type(float_to_int_2))
print(float_to_int_3) print(type(float_to_int_3))
print(float_to_int_4) print(type(float_to_int_4))
>>> 1 >>> <class 'int'> >>> 100 >>> <class 'int'> >>> 3 >>> <class 'int'> >>> 100 >>> <class 'int'>
Python также имеет автоматическое преобразование типов при смешивании различных числовых типов значений. При объединении float и int Python не будет усекать значение, чтобы сохранить информацию, которая может быть потеряна:
a = 1 b = 1.1
type_conversion_addition = a + b
type_conversion_subtraction = a - b
print(type_conversion_addition) print(type(type_conversion_addition))
print(type_conversion_subtraction) print(type(type_conversion_subtraction))
>>> 2.1 >>> <class 'float'> >>> -0.10000000000000009 >>> <class 'float'>
Преобразование int в float расширит целое число, добавив .0 к цифре:
int_to_float_1 = float(1) int_to_float_2 = float(150)
print(int_to_float_1) print(type(int_to_float_1))
print(int_to_float_2) print(type(int_to_float_2))
>>> 1.0 >>> <class 'float'> >>> 150.0 >>> <class 'float'>
Преобразование int в int или типа в себя не изменит тип или вывод:
int_to_int = int(1) float_to_float = float(1.0)
print(int_to_int) print(type(int_to_int))
print(float_to_float) print(type(float_to_float))
>>> 1 >>> <class 'int'> >>> 1.0 >>> <class 'float'>
Вы можете преобразовать число с плавающей запятой в строку, str(1.1):
convert_float_to_string = str(1.1)
print(convert_float_to_string) print(type(convert_float_to_string))
>>> 1.1 >>> <class 'str'>
Но вы получите ошибку при преобразовании строки, содержащей десятичные знаки:
convert_string_with_decimals = int('1.1')
print(convert_string_with_decimals)
>>> convert_string_with_decimals = int('1.1') >>> ValueError: invalid literal for int() with base 10: '1.1'
Или показатель:
convert_string_with_exponent = int('1.0e2')
print(convert_string_with_exponent)
>>> convert_string_with_exponent = int('1.0e2') >>> ValueError: invalid literal for int() with base 10: '1.0e2'
Логические значения, приведенные к целым числам, будут оцениваться как 1 для True и 0 для False:
true_bool_to_int = int(True) false_bool_to_int = int(False)
print(true_bool_to_int) print(type(true_bool_to_int))
print(false_bool_to_int) print(type(false_bool_to_int))
>>> 1 >>> <class 'int'> >>> 0 >>> <class 'int'>
А преобразование целого числа 1 или 0 в логическое значение приведет к тем же обратным значениям True и False:
int_to_true_bool = bool(1) int_to_false_bool = bool(0)
print(int_to_true_bool) print(type(int_to_true_bool))
print(int_to_false_bool) print(type(int_to_false_bool))
>>> True >>> <class 'bool'> >>> False >>> <class 'bool'>
Приведение типа float, 1.0 или 0.0, к логическому значению приводит к тому же результату, что и int:
float_to_true_bool = bool(1.0) float_to_false_bool = bool(0.0)
print(float_to_true_bool) print(type(float_to_true_bool))
print(float_to_false_bool) print(type(float_to_false_bool))
>>> True >>> <class 'bool'> >>> False >>> <class 'bool'>
Вы можете преобразовать строки, представляющие целые числа, в целые числа:
str_to_int_1 = int('1') str_to_int_2 = int('-1') str_to_int_3 = int('1_000')
print(str_to_int_1) print(type(str_to_int_1))
print(str_to_int_2) print(type(str_to_int_2))
print(str_to_int_3) print(type(str_to_int_3))
>>>1 >>> <class 'int'> >>> -1 >>> <class 'int'> >>> 1000 >>> <class 'int'>
Вы получите ошибку, если попытаетесь преобразовать тип пустой строки в int()
:
empty_string_conversion = int('') int_and_string_conversion = int('1 and a string does not work')
print(empty_string_conversion) print(int_and_string_conversion)
>>> empty_string_conversion = int('') >>> ValueError: invalid literal for int() with base 10: ''
Или нецифровой символ, int(‘x’)
:
convert_non_digit = int('x')
print(convert_non_digit)
>>> convert_non_digit = int('x') >>> ValueError: invalid literal for int() with base 10: 'x'
Или int, за которым следует множество разных символов:
# empty_string_conversion = int('') int_and_string_conversion = int('1 and a string does not work')
# print(empty_string_conversion) print(int_and_string_conversion)
>>> int_and_string_conversion = int('1 and a string does not work') >>> ValueError: invalid literal for int() with base 10: '1 and a >>> string does not work'
Следующая часть
В следующей части и ее разделах будет рассмотрено больше базовых и базовых концепций программирования. Следующая тема будет относиться к арифметике и операторам и будет подробно обсуждаться с большим количеством примеров кода и пояснений.
Предыдущие части
Если вы только начинаете свой путь программирования или знакомства с Python, начните с первых принципов Python, часть 0.
Первые принципы Python, часть 0
Краткое введение в один из самых популярных в мире языков программирования Python можно найти здесь.
Первые принципы Python, часть 1
Создайте программу на Python, напишите код в файле .py, успешно скомпилируйте программу без ошибок и выведите текст Hello, World! до терминала здесь.
Первые принципы Python, часть 2
Узнайте, как создавать переменные с осмысленными именами и правильным синтаксисом здесь.
Спасибо за чтение
Если вы нашли эту статью полезной, пожалуйста, поделитесь ею со своими коллегами.
Социальные медиа
Или подпишитесь на меня в социальных сетях, чтобы получать дополнительные бесплатные образовательные материалы и обновления:
"Середина"