Основные типы данных Python3

В Python переменные не нужно объявлять. Каждой переменной должно быть присвоено значение до её использования, и переменная создаётся только после того, как ей присвоено значение.

В Python переменная — это просто переменная; у неё нет типа. То, что мы называем"тип", — это тип объекта в памяти, на который ссылается переменная.

Знак равенства=используется для присваивания значений переменным. Слева от знака равенства находится имя переменной, а справа — значение, хранящееся в переменной. Например:

Пример (Python 3.0+)

#!/usr/bin/python3

counter = 100          # целочисленная переменная
miles   = 1000.0       # переменная с плавающей запятой
name    = "example"     # строка

print(counter)
print(miles)
print(name)

Запустить пример »

При выполнении вышеприведённой программы будет выведен следующий результат:

100
1000.0
example

Множественное присваивание переменных

Python позволяет присваивать значения нескольким переменным одновременно. Например:

a = b = c = 1

В приведённом выше примере создаётся целочисленный объект со значением 1, и всем трём переменным присваивается одно и то же значение.

Вы также можете одновременно присвоить разные значения нескольким переменным. Например:

a, b, c = 1, 2, "example"

В приведённом выше примере целочисленные объекты 1 и 2 присваиваются переменным a и b соответственно, а строковый объект "example" присваивается переменной c.

Вы можетеtype()использовать функцию для просмотра типа переменной:

Пример

# определение переменной
x = 10           # целое число
y = 3.14         # число с плавающей запятой
name = "Alice"   # строка
is_active = True # логическое значение

# множественное присваивание переменных
a, b, c = 1, 2, "three"

# проверить типы данных
print(type(x))         # <class 'int'>
print(type(y))         # <class 'float'>
print(type(name))      # <class 'str'>
print(type(is_active)) # <class 'bool'>

Стандартные типы данных

В Python3 есть 6 стандартных типов данных, а также булев тип bool (bool — подкласс int, иногда его указывают отдельно):

  • Number
  • String
  • bool (логический тип)
  • Список
  • Tuple
  • Set
  • Словарь

В зависимости от изменяемости их можно разделить на следующие две категории:

  • Неизменяемые данные (4):Число, Строка, bool, Кортеж
  • Изменяемые данные (3):Список, Словарь, Множество

Кроме того, существуют некоторые расширенные типы данных, например тип байтового массива bytes.


Number

Python3 поддерживаетint, float, bool, complex。

В Python 3 есть только один целочисленный тип, int, представленный как длинное целое; нет Long, как в Python 2.

Встроеннаяtype()функция может использоваться для запроса типа объекта, на который ссылается переменная.

>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
&lt;class 'int'&gt; &lt;class 'float'&gt; &lt;class 'bool'&gt; &lt;class 'complex'&gt;

Кроме того, вы также можете использоватьisinstance()чтобы определить:

Пример

>>> a = 111
>>> isinstance(a, int)
True

isinstanceиtypeРазница заключается в следующем:

  • type()не считает подкласс типом родительского класса.
  • isinstance()считает подкласс типом родительского класса.
>>> class A:
...     pass
...
>>> class B(A):
...     pass
...
>>> isinstance(A(), A)
True
>>> type(A()) == A
True
>>> isinstance(B(), A)
True
>>> type(B()) == A
False

Примечание:В Python3 bool является подклассом int. True и False можно складывать с числами;True==1、False==0он возвращаетTrue, но можно использоватьisдля определения идентичности объекта.

>>> issubclass(bool, int)
True
>>> True == 1
True
>>> False == 0
True
>>> True + 1
2
>>> False + 1
1
>>> 1 is True
&lt;stdin&gt;:1: SyntaxWarning: "is" with 'int' literal. Did you mean "=="?
False
>>> 0 is False
&lt;stdin&gt;:1: SyntaxWarning: "is" with 'int' literal. Did you mean "=="?
False

Почему возникает SyntaxWarning?

Python обнаруживает, что вы используетеisсравнивать целочисленный литерал (например, 1) с True. Обычно это ошибка в коде, потому чтоisсравнивает идентичность объектов (являются ли они одним и тем же объектом), а не равенство значений. Python рекомендует использовать==для сравнения значений, если только вам действительно не нужно проверить, является ли это тем же самым объектом.

В Python 2 не было логического типа; для False использовалось число 0, а для True — 1.

При присваивании значения создаётся объект Number:

var1 = 1
var2 = 10

Вы можете использовать инструкциюdelдля удаления ссылок на объекты:

del var1[, var2[, var3[...., varN]]]

Например:

del var
del var_a, var_b

Числовые операции

Пример

>>> 5 + 4   # сложение
9
>>> 4.3 - 2 # вычитание
2.3
>>> 3 * 7   # умножение
21
>>> 2 / 4   # деление, результат — float
0.5
>>> 2 // 4  # целочисленное деление, результат — целое число
0
>>> 17 % 3  # остаток от деления
2
>>> 2 ** 5  # возведение в степень
32

Примечание:

  • Python может присваивать значения нескольким переменным одновременно, напримерa, b = 1, 2。
  • Переменная может ссылаться на объекты разных типов с помощью присваивания.
  • Деление чисел включает два оператора:/возвращает число с плавающей точкой,//возвращает целое число (с округлением вниз).
  • В смешанных вычислениях Python автоматически преобразует целые числа в числа с плавающей точкой.

Примеры числовых типов

intfloatсложная
100.03.14j
10015.2045.j
-786-21.99.322e-36j
0o1732.3e+18.876j
-0o112-90.-.6545+0J
-0x260-32.54e1003e+26J
0x6970.2E-124.53e-7j

Примечание: В Python 3 целочисленные литералы не допускают ведущих нулей (таких как080), восьмеричные числа должны использовать0oпрефикс (например,0o17), шестнадцатеричные числа используют0xпрефикс (например,0x69), двоичные числа используют0bпрефикс.

Python также поддерживает комплексные числа. Комплексное число состоит из действительной части и мнимой части и может быть выражено с помощьюa + bjилиcomplex(a, b). Действительная частьaи мнимая частьbобе имеют тип float.


String

Строки в Python заключаются в одинарные кавычки'или двойные кавычки", а обратные слеши используются\для экранирования специальных символов.

Синтаксис среза строки следующий:

variable[start index:end index]

Значения индексов начинаются с 0, а -1 — это позиция с конца.

Знак плюс+является оператором конкатенации строк, а звёздочка*обозначает повторение текущей строки, а число, указанное вместе с ней, — это количество повторений. Пример выглядит так:

Пример

#!/usr/bin/python3

my_str = 'Example'       # определяем строковую переменную (не используйте str как имя переменной, так как это перекроет встроенный тип)

print(my_str)           # выводим всю строку: Example
print(my_str[0:-1])     # выводим с индекса 0 до предпоследнего символа (не включая последний): Runoo
print(my_str[0])        # выводим первый символ: R
print(my_str[2:5])      # выводим символы с индексами 2, 3, 4 (исключая индекс 5): noo
print(my_str[2:])       # вывести с индекса 2 до конца: noob
print(my_str * 2)       # повторить дважды: ExampleExample
print(my_str + "TEST")  # конкатенация строк: ExampleTEST

При выполнении вышеприведённой программы будет выведен следующий результат:

Example
Runoo
R
noo
noob
ExampleExample
ExampleTEST

Python использует обратные слэши\для экранирования специальных символов. Если вы не хотите, чтобы обратный слэш экранировал, можно добавитьrперед строкой, указывая на сырую строку:

Пример

>>> print('Ru\noob')
Ru
oob
>>> print(r'Ru\noob')
Ru\noob

Кроме того, обратный слэш (\) может служить символом продолжения строки, указывая, что следующая строка является продолжением предыдущей. Вы также можете использовать"""..."""или'''...'''для переноса на несколько строк.

Обратите внимание, что в Python нет отдельного типа символа; символ — это строка длиной 1.

Пример

>>> word = 'Python'
>>> print(word[0], word[5])
P n
>>> print(word[-1], word[-6])
n P

В отличие от строк в C, строки Python нельзя изменять. Присваивание значения позиции по индексу, напримерword[0] = 'm', вызовет ошибку.

Примечание:

  • Обратные слэши можно использовать для экранирования; используйтеrПрефикс может предотвратить экранирование обратных слэшей (raw-строки).
  • Строки могут использовать+оператор для конкатенации, и*оператор для повторения.
  • Строки в Python имеют два способа индексации: начиная с 0 слева направо и начиная с -1 справа налево.
  • Строки в Python нельзя изменять; строки — неизменяемый тип.

bool (логический тип)

Логический тип — это True или False. В Python True и False — оба являются ключевыми словами, представляющими логические значения.

Логический тип можно использовать для управления потоком программы, например для определения, истинно ли условие, или для выполнения фрагмента кода, когда условие выполнено.

Характеристики логического типа:

  • Логический тип имеет только два значения: True и False.
  • bool является подклассом int, поэтому логические значения можно использовать как целые числа, где True эквивалентно 1, а False — 0.
  • Логический тип можно сравнивать с другими типами данных, такими как числа и строки. При сравнении Python рассматривает True как 1, а False как 0.
  • Логический тип можно использовать с логическими операторами, включаяand、orиnot, чтобы объединять несколько логических выражений.
  • Логический тип также можно преобразовать в другие типы данных, такие как целые числа, числа с плавающей запятой и строки. При преобразовании True становится 1, а False — 0.
  • Вы можете использоватьbool()функция для преобразования значений других типов в логический. Следующие значения при преобразовании в логический тип являютсяFalse:None、False, ноль (0、0.0、0j), пустые последовательности (такие как''、()、[]) и пустые отображения (такие как{}). Все остальные значения при преобразовании в логический тип являютсяTrue。

Пример

# Значения и типы логического типа
a = True
b = False
print(type(a))  # <class 'bool'>
print(type(b))  # <class 'bool'>

# Целочисленное представление логического типа
print(int(True))   # 1
print(int(False))  # 0

# Используйте функцию bool() для преобразования
print(bool(0))          # False
print(bool(42))         # True
print(bool(''))         # False
print(bool('Python'))   # True
print(bool([]))         # False
print(bool([1, 2, 3]))  # True

# Логические операции с булевыми значениями
print(True and False)  # False
print(True or False)   # True
print(not True)        # False

# Операции сравнения булевых значений
print(5 > 3)   # True
print(2 == 2)  # True
print(7 < 4)   # False

# Логические значения в потоке управления
if True:
    print("Это всегда будет напечатано")

if not False:
    print("Это также всегда будет напечатано")

x = 10
if x:
    print(x — ненулевое значение, которое в логическом контексте равно True)

Примечание:В Python все ненулевые числа и непустые строки, списки, кортежи и другие типы данных считаются True; только0, пустые строки, пустые списки и пустые кортежии т. д. считаются False. Поэтому при выполнении преобразования к логическому типу нужно обращать внимание на истинность значения типа данных.


Список

Список — наиболее часто используемый тип данных в Python.

Списки могут реализовывать большинство структур данных коллекций. Типы элементов в списке могут различаться; он поддерживает числа, строки и может даже содержать списки (т. е. вложенные списки).

Списки записываются в квадратных скобках[], элементы между ними разделяются запятыми.

Как и строки, списки также можно индексировать и срезать. После среза списка возвращается новый список, содержащий нужные элементы.

Синтаксис среза списка выглядит следующим образом:

variable[start index:end index]

Значения индексов принимают0в качестве начального значения,-1в качестве начальной позиции с конца.

Знак плюс+— оператор конкатенации списков; звёздочка*— операция повторения. Пример:

Пример

#!/usr/bin/python3

my_list = ['abcd', 786, 2.23, 'example', 70.2]  # Избегайте использования list в качестве имени переменной; оно перекроет встроенный тип
tinylist = [123, 'example']

print(my_list)             # Вывести весь список: ['abcd', 786, 2.23, 'example', 70.2]
print(my_list[0])          # Вывести первый элемент (индекс 0): abcd
print(my_list[1:3])        # Вывести элементы с индексами 1 и 2 (не включая индекс 3): [786, 2.23]
print(my_list[2:])         # Вывести все элементы с индекса 2 до конца: [2.23, 'example', 70.2]
print(tinylist * 2)        # Вывести tinylist дважды: [123, 'example', 123, 'example']
print(my_list + tinylist)  # Объединить два списка

Вывод приведенного выше примера:

['abcd', 786, 2.23, 'example', 70.2]
abcd
[786, 2.23]
[2.23, 'example', 70.2]
[123, 'example', 123, 'example']
['abcd', 786, 2.23, 'example', 70.2, 123, 'example']

В отличие от строк Python, элементы списка можно изменять:

Пример

>>> a = [1, 2, 3, 4, 5, 6]
>>> a[0] = 9
>>> a[2:5] = [13, 14, 15]
>>> a
[9, 2, 13, 14, 15, 6]
>>> a[2:5] = []   # Присвойте соответствующим элементам пустой список, то есть удалите эти элементы
>>> a
[9, 2, 6]

У списка есть много встроенных методов, таких какappend()、pop()и т. д., которые будут рассмотрены позже.

Примечание:

  • Списки записываются в квадратных скобках, элементы разделяются запятыми.
  • Как и строки, списки можно индексировать и брать срезы.
  • Списки могут использовать оператор+для конкатенации.
  • Элементы списка можно изменять (изменяемый тип).

Срезы списков в Python могут принимать третий параметр, который задаёт шаг среза. В следующем примере шаг среза равен 2 (берётся каждый второй элемент) от индекса 1 до индекса 4, чтобы взять срез списка:

Если третий параметр отрицательный, это означает чтение в обратном порядке. Следующий пример используется для изменения порядка слов в строке на обратный:

Пример

def reverseWords(input):

    # Разбейте строку по пробелам, чтобы получить список слов
    inputWords = input.split(" ")

    # Объяснение трёх параметров inputWords[-1::-1]:
    # Первый параметр -1 означает начало с последнего элемента
    # Второй параметр пуст, что означает переход к началу списка
    # Третий параметр -1 означает шаг в обратном направлении (каждый раз сдвиг на одну позицию влево)
    inputWords = inputWords[-1::-1]

    # Снова объедините слова пробелами
    output = ' '.join(inputWords)

    return output

if __name__ == "__main__":
    input = 'I like example'
    rw = reverseWords(input)
    print(rw)

Результат вывода:

example like I

Tuple

Кортеж похож на список, за исключением того, что элементы кортежа нельзя изменять. Кортежи записываются в круглых скобках()с элементами, разделёнными запятыми.

Типы элементов в кортеже также могут быть разными:

Пример

#!/usr/bin/python3

my_tuple = ('abcd', 786, 2.23, 'example', 70.2)  # Избегайте использования tuple в качестве имени переменной
tinytuple = (123, 'example')

print(my_tuple)               # Вывести весь кортеж
print(my_tuple[0])            # Вывести первый элемент: abcd
print(my_tuple[1:3])          # Вывести элементы с индексами 1 и 2: (786, 2.23)
print(my_tuple[2:])           # Вывести все элементы, начиная с индекса 2
print(tinytuple * 2)          # Вывести tinytuple дважды
print(my_tuple + tinytuple)   # Объединить два кортежа

Вывод приведенного выше примера:

('abcd', 786, 2.23, 'example', 70.2)
abcd
(786, 2.23)
(2.23, 'example', 70.2)
(123, 'example', 123, 'example')
('abcd', 786, 2.23, 'example', 70.2, 123, 'example')

Кортежи похожи на строки; их можно индексировать индексами, начиная с 0, при этом -1 обозначает позицию с конца, и их также можно срезать.

На самом деле, строку можно рассматривать как особый вид кортежа.

Пример

>>> tup = (1, 2, 3, 4, 5, 6)
>>> print(tup[0])
1
>>> print(tup[1:5])
(2, 3, 4, 5)
>>> tup[0] = 11  # Изменение элементов кортежа запрещено
Traceback (most recent call last):
  Файл "&lt;stdin&gt;", строка 1, в &lt;module&gt;
TypeError: 'tuple' объект не поддерживает присваивание элементов

Хотя элементы кортежа нельзя изменять, кортеж может содержать изменяемые объекты, например список.

Создание кортежа из 0 или 1 элемента — особый случай, имеющий дополнительные синтаксические правила:

tup1 = ()    # 空元组
tup2 = (20,) # 一个元素,需要在元素后添加逗号

Если вы хотите создать кортеж только с одним элементом, нужно добавить запятую после элемента, чтобы отличить его от обычного значения. Без запятой Python интерпретирует скобки как скобки в математическом выражении:

not_a_tuple = (42)  # 这是整数 42,不是元组

string、listиtupleвсе относятся к типу последовательности.

Примечание:

  • Как и строки, элементы кортежа нельзя изменять (неизменяемый тип).
  • Кортежи также можно индексировать и создавать срезы так же, как списки.
  • Обратите внимание на особые синтаксические правила создания кортежей из 0 или 1 элемента.
  • Кортежи также могут использовать+оператор для конкатенации.

Set

Множество в Python — это неупорядоченный, изменяемый тип данных, используемый для хранения уникальных элементов. Элементы множества не повторяются, и над множествами можно выполнять обычные операции, такие как пересечение, объединение и разность.

В Python множества представляются фигурными скобками{}, а элементы разделяются запятыми,. Вы также можете использовать функциюset()для создания множества.

Примечание:Чтобы создать пустое множество, нужно использоватьset()вместо{}, потому что{}создаёт пустой словарь.

Формат создания:

parame = {value01, value02, ...}
或者
set(value)

Пример

#!/usr/bin/python3

sites = {'Google', 'Taobao', 'Example', 'Facebook', 'Zhihu', 'Baidu'}

print(s)   Вывод множества (неупорядоченное, повторяющиеся элементы автоматически удаляются)

# Проверка принадлежности
if 'Example' in sites:
    print('Example содержится в множестве')
else:
    print('Example не содержится в множестве')

# Множества поддерживают операции над множествами
a = set('abracadabra')
b = set('alacazam')

print(a)           # Уникальные символы в a

print(a - b)       # Разность между a и b (в a, но не в b)
print(a | b)       # Объединение a и b (в a или b)
print(a & b)       # Пересечение a и b (и в a, и в b)
print(a ^ b)       # Симметрическая разность a и b (в a или b, но не в обоих)

Вывод приведенного выше примера:

{'Zhihu', 'Baidu', 'Taobao', 'Example', 'Google', 'Facebook'}
Example 在集合中
{'b', 'c', 'a', 'r', 'd'}
{'r', 'b', 'd'}
{'b', 'c', 'a', 'z', 'm', 'r', 'l', 'd'}
{'c', 'a'}
{'z', 'b', 'm', 'r', 'l', 'd'}

Словарь

Словарь — это ещё один очень полезный встроенный тип данных в Python.

Словарь — это тип отображения, использующий{}в качестве идентификатора; этоключ: значениеколлекция. Ключи должны быть неизменяемого типа, и ключи должны быть уникальными в пределах одного словаря.

Примечание:Начиная с Python 3.7, словари сохраняютпорядок вставки, и больше не являются неупорядоченными. Если вам нужны функции упорядоченного словаря, просто используйте обычныйdictdict.

Пример

#!/usr/bin/python3

my_dict = {}
my_dict['one'] = "1 - Rookie Tutorial"
my_dict[2]     = "2 - Rookie Tools"

tinydict = {'name': 'example', 'code': 1, 'site': 'www.example.com'}

print(my_dict['one'])       # Вывести значение с ключом 'one'
print(my_dict[2])           # Вывести значение с ключом 2
print(tinydict)             # Вывести весь словарь
print(tinydict.keys())      # Вывести все ключи
print(tinydict.values())    # Вывести все значения

Вывод приведенного выше примера:

1 - Example
2 - Example工具
{'name': 'example', 'code': 1, 'site': 'www.example.com'}
dict_keys(['name', 'code', 'site'])
dict_values(['example', 1, 'www.example.com'])

Конструкторdict()Вы можете напрямую создать словарь из последовательности пар ключ-значение:

Пример

>>> dict([('Example', 1), ('Google', 2), ('Taobao', 3)])
{'Example': 1, 'Google': 2, 'Taobao': 3}
>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}
>>> dict(Example=1, Google=2, Taobao=3)
{'Example': 1, 'Google': 2, 'Taobao': 3}

{x: x**2 for x in (2, 4, 6)}Здесь используется словарное включение. Подробнее о включениях см.:Включения в Python。

Кроме того, типы словарей также имеют некоторые встроенные функции, такие какclear()、keys()、values()и т. д.

Примечание:

  • Словарь — это тип отображения, а его элементы — пары ключ-значение.
  • Ключи словаря должны быть неизменяемого типа и не могут дублироваться.
  • Чтобы создать пустой словарь, используйте{}。
  • Начиная с Python 3.7, словари сохраняют порядок вставки.

Тип bytes

В Python 3 тип `bytes` представляет собой неизменяемую двоичную последовательность. В отличие от строкового типа, элементы объекта `bytes` являются целочисленными значениями (целыми числами от 0 до 255), а не символами Unicode.

Тип `bytes` обычно используется для обработки двоичных данных, таких как файлы изображений, аудиофайлы, видеофайлы и т. д. В сетевом программировании тип `bytes` также часто используется для передачи двоичных данных.

Самый распространённый способ создать объект `bytes` — использоватьbпрефикс:

Пример

x = b"hello"           # Создать объект bytes с помощью префикса b
print(x)               # b'hello'
print(type(x))         # <class 'bytes'>
print(x[0])            # 104 (значение ASCII для 'h', элементы bytes — целые числа)

Вы также можете использоватьbytes()функция для преобразования объектов других типов в тип `bytes`; второй параметр задаёт кодировку:

x = bytes("hello", encoding="utf-8")

Подобно строковому типу, тип `bytes` также поддерживает срезы, конкатенацию, поиск, замену и т. д. Поскольку тип `bytes` неизменяем, операции изменения требуют создания нового объекта `bytes`:

Пример

x = b"hello"
y = x[1:3]          # Операция среза, получает b'el'
z = x + b"world"    # Операция конкатенации, получает b'helloworld'
print(y)            # b'el'
print(z)            # b'helloworld'

Обратите внимание, что элементы типа `bytes` являются целочисленными значениями, поэтому при выполнении операций сравнения нужно использовать соответствующее целочисленное значение. Можно использоватьord()функцию для преобразования символа в соответствующее ему целочисленное значение:

Пример

x = b"hello"
if x[0] == ord("h"):    # ord("h") возвращает 104
    print("Первый элемент — 'h'")

Преобразование типов данных Python

Иногда нам нужно преобразовывать встроенные типы данных; просто используйте тип данных как имя функции. В следующей главеПреобразование типов данных в Python3будет подробно описано.

Следующие встроенные функции могут выполнять преобразования между типами данных. Эти функции возвращают новый объект, представляющий преобразованное значение:

ФункцияОписание

int(x [,base])

Преобразовать x в целое число

float(x)

Преобразовать x в число с плавающей запятой

complex(real [,imag])

Создать комплексное число

str(x)

Преобразовать объект x в строку

repr(x)

Преобразовать объект x в строку-выражение

eval(str)

Вычислить допустимое Python-выражение в строке и вернуть объект

tuple(s)

Преобразовать последовательность s в кортеж

list(s)

Преобразовать последовательность s в список

set(s)

Преобразовать в изменяемое множество

dict(d)

Создать словарь. d должен быть последовательностью кортежей (key, value).

frozenset(s)

Преобразовать в неизменяемое множество

chr(x)

Преобразовать целое число в соответствующий символ

ord(x)

Преобразовать символ в его целочисленное значение (кодовая точка Unicode)

hex(x)

Преобразовать целое число в шестнадцатеричную строку

oct(x)

Преобразовать целое число в восьмеричную строку

Другие расширения