Python типы: Типы данных в Python | Python 3 для начинающих и чайников
Pythonicway — Типы данных в Python
Переменные в Python:
Переменная в языке программирования это название для зарезервированного места в памяти компьютера, предназначенное для хранения значений. Это означает, что когда вы создаете переменную, вы на самом деле резервируете определенное место в памяти компьютера.
Основываясь на типе данных переменной, интерпретатор выделяет необходимое количество памяти и решает, что может находится в зарезервированной области памяти.
Для понимания, можете думать о переменной как о коробке, в которую можно положить любую вещь, но только определенного размера. Размер в данном примере будет типом переменной. Это не совсем верное определение, но оно дает общее представление о картине в целом.
Присвоение значения переменной:
В Python вам не нужно объявлять тип переменной вручную (как, например в С++). Объявление происходит автоматически (это называется динамическая типизация), когда вы присваиваете значение переменной. Знак равенства ( = ) используется для присвоения значения переменной.
Операнд по левую сторону от знака равно ( = ) это имя переменной, операнд по правую сторону — значение присвоенное этой переменной.
Например:
country = "Swiss" # Присвоить значение Swiss переменной под названием country age = 23 # Присвоение значения 23 переменной age print country print age
При выполнении, данный код выведет:
Swiss 23
Множественное присвоение значений:
В Python возможно присваивать одно значение нескольким переменным сразу. Например:
a = b = c = 1
В данном создается объект со значением 1, и все 3 переменные указывают на область в памяти, в которой он находится.
Встроенные типы данных в Python:
Информация, сохраненная в памяти может быть разных типов данных. Например, возраст человека может быть числовым значением, а его адрес — буквенно-числовым. В Python существует множество стандартных типов данных, которые используются для хранения определенных значений и обладают своими специфическими методами.
К стандартным типам данных в Python относят:
Числовой тип данных в Python:
Числовой тип данных в Python предназначен для хранения числовых значений. Это неизменяемый тип данных, что означает, что изменение значения числового типа данных приведет к созданию нового объекта в памяти (и удалению старого)
Числовые объекты создаются, когда вы присваиваете им значение. Например:
num1 = 23 num2 = 42
Также вы можете удалять числовой объект при помощи ключевого слова del. Синтаксис команды del следующий:
del num1 # удаляет переменную num1 del num2, num3 # удаляет обе переменные num2 за num3 за раз
В Python есть четыре вида числового типа данных:
- int (целое число)
- long (длинное целое число [может быть представлено в восьмеричной или шестнадцатеричной системе исчисления])
- float (число с плавающей точкой: -0.2, 0.0, 3.14159265 и т.д.)
- complex (комплексное число)
Примеры видов числового типа данных:
int | long | float | complex |
---|---|---|---|
1 | 51924361L | 0.0 | 3.14j |
102 | -0x19323L | 15.20 | 45.j |
-786 | 0122L | -21.9 | 9.322e-36j |
0 | 0xDEFABCECBDAECBFBAEl | 32.3+e18 | .876j |
0b10 | 535633629843L | -90. | -.6545+0J |
-0x260 | -052318172735L | -32.54e100 | 3e+26J |
0x69 | -4721885298529L | 70.2-E12 | 4.53e-7j |
Строки в Python:
Под строками в Python подразумевается набор символов между кавычками. В Python можно использовать пары одинарных либо двойных кавычек. Из строк можно взять подстроку используя оператор нарезки ( [ ] и [ : ] ) с индексами от нуля для первого символа строки и до последнего. Так же можно использовать обратную индексацию от -1 для последнего символа до начала.
Оператор плюс ( + ) для строк соединяет две строки в одну, звездочка ( * ) оператор повторения. Например:
text = "Hello, Python!" print text[0] # Выводит первый символ print text[0:5] # Выводит подстроку text от 0 символа до 5 (включительно с нулевым, исключая пятый) print text[4:10] # Выведет строку от 4 символа до 10 (включая четвертый, исключая 10) print text[0:14] # Выведет всю строку print text[7:] # Выведет строку с 7 символа до конца print text[:5] # Выведет строку с начала до 5 символа. Аналогично print text[0:5] print text[:] # Выведет всю строку print text[-1] # Выводит последний символ print text[-1:-14] # Не сработает, выведет пустую строку print text[::2] # Третий аргумент - шаг. Выведет каждый второй символ print text[::-1] # Шаг отрицательный. Выведет фразу наоборот print text + "Nice to code you" # Выведет новую строку print text[-1] * 10 # Выведет 10 восклицательных знаков
В результате вы увидите следующее
Списки в Python:
Списки, пожалуй, самый универсальный составной тип данных в Python. Список состоит из элементов, разделенных запятыми, находящихся между квадратными скобками ( [ ] ). В определенной мере, списки подобны массивам в C. Единственной разницей является то, что элементы одного списка могут иметь разные типы данных.
Получить доступ к элементам, сохраненным в списке можно, точно так же, как и в строках, при помощи оператора нарезки ( [ ] и [:] ) и индексов, начиная с нуля и до конца. Знак плюс ( + ) объединяет два списка, а звездочка ( * ) — оператор повторения для списка. Например:
my_list =[True, 786, 3.14, 'text', 70.2] second_list =[123, 'text'] print my_list # Напечатает весь список print my_list[0] # Напечатает первый элемент списка print my_list[1:3] # Напечатает элементы списка со второго по третий print my_list[2:] # Напечатает элементы списка начиная с третьего print second_list *2 # Напечатает удвоенный список print my_list + second_list # Напечатает объединенные списки
В результате вы увидите:
[True, 786, 3.14, 'text', 70.2] True [786, 3.14] [3.14, 'text', 70.2] [123, 'text', 123, 'text'] [True, 786, 3.14, 'text', 70.2, 123, 'text']
Кортежи в Python:
Кортеж это еще один составной тип данных, похожий на список. Кортеж состоит из ряда значений, разделенных запятыми, заключенными в круглые скобки ( ( ) ). Основным различием между списками и кортежами является то, что элементы кортежей не могут быть изменены. То есть, кортежи можно рассматривать как списки доступные только для чтения.
Если у вас нет необходимости изменять элементы списка, то для экономии места в памяти лучше использовать тип данных кортеж.
my_tuple =(True, 786, 3.14, 'text', 70.2) second_tuple =(123, 'text') print my_tuple # Печатает весь кортеж rint my_tuple[0] # Печатает первый элемент print second_tuple *2 # Печатает удвоенный кортеж print my_tuple + second_tuple # Печатает объединенные кортежи
В результате вы получите:
(True, 786, 3.14, 'text', 70.2) True (123, 'text', 123, 'text') (True, 786, 3.14, 'text', 70.2, 123, 'text')
При этом, следующие действия доступны для списков и недоступны для кортежей:
my_list = ["Rome", 23, ["cat","dog"], True, 3.14] my_tuple = ("Rome", 23, ["cat","dog"], True, 3.14) my_list[0] = "Paris" # Замена значения первого элемента сработает для списка my_tuple[0] = "Paris" # Та же операция для кортежа вызовет ошибку
Словари в Python:
Словари в Python это неотсортированная колекция элементов, доступ к которым осуществляется по ключу. То есть, каждому ключу словаря соответствует определенное значение. Ключом может быть любой неизменяемый тип данных (число, строка, кортеж), значением — любой тип данных.
Пары ключ, значение словаря заключаются в фигурные скобки ( { } ). Есть несколько способов создания словарей:
my_dict = { } # Создаем пустой словарь my_dict["country"] = "Mexico" # Присваиваем ключу country значение Mexico print my_dict["country"] # Выведет Mexico # Заполнение словаря при инициализации another_dict = {"number":23, 2: True, "my_list":[1,2,3]} print another_dict.keys() # Напечатает список всех ключей print another_dict.values() # Напечатает список всех значений
Данный код выведет следующее:
Обратите внимание, что ключи и значения выводятся не в том порядке, в котором мы их задавали.
Сеты в Python:
Сет в Python это еще один изменяемый, коллекционный тип данных, отличительной чертой которого является то, что он хранит только уникальные значания.
Создать сеты можно следующими способами:
# Создание пустого сета s = set() # Создание сета инициализацией s = {"hi", "bye"}
Для добавление элемента в сет используется метод add, для удаления — pop или remove. Добавление в сет уже существующего элемента не повлияет на сет. Сеты обладают множеством методов для работы с уникальными элементами, например difference — возвращает элементы сета отсутствующие в другом сете, intersection — наоборот, возвращает елементы сета присутствующие в другом сете.
Преобразование типов данных:
Иногда может возникнуть необходимость преобразовать один тип данных в другой. Для этого существуют специальные встроенные функции Python. Вот некоторые из них:
Функция | Описание |
---|---|
int(x [,base])
|
Преобразовывает х в целое число. Например, int(12.4) -> 12
|
long(x [,base] )
|
Преобразовывает х в long. Например, long(20) -> 20L
|
float(x)
|
Преобразовывает х в число с плавающей точкой. Например float(10) -> 10.0
|
complex(real [,imag])
|
Создает комплексное число. Например complex(20) -> (20+0j)
|
str(x)
|
Преобразовывает х в строку. Например str(10) -> ’10’
|
tuple(s)
|
Преобразовывает s в кортеж. Например tuple(«hello») -> ( «h»,»e»,»l»,»l»,»o» )
|
list(s)
|
Преобразовывает s в список. Например list(«Python») -> [ «P»,»y»,»t»,»h»,»o»,»n» ]
|
dict(d)
|
Создает словарь из d. Например dict( [ (1,2), (3,4) ] ) -> { 1:2, 3:4 }
|
Типы данных в Python 3 числовые и строковые — Списки и другие встроенные типы данных
Возможность распределять данные по типам упрощает работу программиста, делает код логичным и понятным, с помощью типов можно структурировать информацию “по полочкам” и создавать специализированные инструменты, эффективно работающие с данными определённого типа.
Python позволяет работать со всеми основными типами данных: числа, строки, последовательности, множества и так далее. Кроме того, программист может явно не указывать тип, интерпретатор определит его сам.
Динамическая типизация
В языках со статической типизацией сначала нужно определить тип переменной, и только потом присвоить значение. В Python тип переменной определяется в момент присваивания, то есть её не нужно отдельно объявлять, достаточно написать: name = "Джон"
, тогда переменная name
будет иметь строковый тип.
Работает динамическая типизация в Python достаточно просто. Переменная — это ссылка на ячейку памяти(объект), в которой хранится значение и информация о его типе.
Динамическое определение типов упрощает написание программ, делает код более гибким и универсальным. С другой стороны статическая типизация позволяет легче находить и отлаживать ошибки и даёт более простой, а значит и производительный машинный код.
Python позволяет использовать сильные стороны обоих способов, по умолчанию тип определяется автоматически, но программист может явно указать интерпретатору нужный тип переменной.
Как узнать тип переменной
Тип переменной определяется с помощью встроенной функции type()
. Её используют, чтобы понять, как работают типы в Python, и чтобы избежать необходимости отлавливать и обрабатывать исключения, например, когда интерпретатор ожидает число, а пользователь вводит строку. Пример:
a = 10 b = "Строка" c = [1,2,3,4] d = True print(str(type(a)) + str(type(b)) + str(type(c)) + str(type(d))) # Вывод <class 'int'><class 'str'><class 'list'><class 'bool'>
Числовые типы
Числовые типы данных используется для хранения чисел. Все числовые типы неизменяемые, то есть если изменяется значение переменной, то создается новый объект, а старый удаляется.
В Python есть такие типы чисел, как целые, вещественные и комплексные. Они определены ключевыми словами int, float и complex.
- Целые числа — числа, значения которых представлены типом Это могут быть как отрицательные, так и положительные числа любой длины, интерпретатор Python не накладывает на неё ограничений.
- Вещественные числа представлены типом Они могут отображаться в обычном виде или с использованием “е”: 1.252e+5. Из-за того что невозможно точно представить некоторые десятичные числа с плавающей точкой в двоичной системе счисления, при вычислениях могут возникать ошибки.
- Комплексные числа представлены типом Это сложные числа вида 3 + 8j, где “3” — это действительная часть, а “8j” — мнимая.
Системы счисления
Python позволяет работать с числами в разных системах счисления, переводить числа из одной системы счисления в другую. Для этого используется несколько встроенных функций:
- int(число, основание системы) — преобразовывает число в целое в нужной системе счисления. По умолчанию используется десятичная система счисления.
- bin(число) — преобразует число в двоичное.
- hex(число) — преобразует число в шестнадцатеричное.
- oct(x) – преобразует число в восьмеричное.
Пример:
print(oct(10)) # Выведет '0o12' print(hex(11)) # Выведет '0xb' print(bin(11)) # Выведет '0b1011'
Описанные встроенные функции позволяют работать только с целыми числами, при попытке передать в функцию вещественное число вызовется исключение.
Сложные вычисления модуль math
Чтобы выполнять сложные арифметические операции над числами, такие как перевод вещественных чисел в разные системы счисления, вычисление корня и возведение в степень, нахождение значений тригонометрических функций, программисты используют модуль math.
Он предоставляет программисту огромное количество функций для работы с данными числового типа. Код каждой функции отлажен и оптимизирован, что уменьшает время его выполнения и увеличивает производительность программы.
import math print(math.sqrt(math.pi)) # Результат выполнения: 1.7724538509055159
Последовательности
В Python последовательностью называется упорядоченная коллекция, содержащая данные похожих или разных типов. Последовательности позволяют эффективно хранить большое количество элементов и бывают трех видов: строки, списки, кортежи.
Строка
Строки — это массивы байтов, которые представляют символы Unicode. Они состоят из одного или нескольких символов, заключенных в кавычки. В Python нет отдельное типа для представления одного символа, символ — это просто единичная строка.
Создание строки
Чтобы создать строку, нужно присвоить переменной последовательность символов, заключённую в одинарные, двойные или тройные кавычки. Когда необходимо использовать внутри строки сами кавычки, применяется символ “\”, который называется escape-последовательностью и позволяет использовать специальные символы внутри строки.
Доступ к элементам строки
Программист может получить доступ к одному или нескольким символам строки, обращаясь к ней по индексам, как к массиву –
string = "Строка" print(string[0]) #Выведет "С"
Если попытаться получить доступ к строке по индексу, выходящему за диапазон длины строки, возбудится исключение IndexError, а попытка обратиться к строке по вещественному индексу вызовет исключение TypeError.
Удаление и изменение элементов строки
Строка — это неизменяемая последовательность, то есть удалить или изменить один из её символов невозможно. Чтобы изменить часть строки, нужно удалить старое значение и записать новое.
Список
Списки ведут себя почти также, как массивы в других языках программирования. Главное достоинство списков в Python в том, что в них можно хранить значения разных типов. То есть в одном списке могут храниться как целые числа, так и строки, и это не приведёт к ошибкам.
Списки — это изменяемые последовательности, то есть можно редактировать, добавлять и удалять элементы в списке после его создания. Как и в других языках программирования, каждому элементу присвоен индекс, и нумерация начинается с нуля.
Создание списка
Списки в Python 3 создаются с помощью квадратных скобок “[]”. Интерпретатор не требует от программиста использовать встроенную функцию, а также позволяет вкладывать списки друг в друга:
a = [1, 10,100] # Список с элементами 1, 10, 100 b = [1, 2, [3, 4], 5] # Список [3, 4] вложен в список b
Добавление элементов
Существует несколько методов, которые позволяют добавить в список новый элемент:
- append() – метод, добавляющий один элемент в конец списка.
- insert() – метод, который добавляет один элемент в нужную позицию списка.
- extend() – метод, позволяющий добавить несколько элементов в конец списка.
Пример:
a = [1, 2] a.append(5) # a = [1, 2, 5] a.insert(0, 3) # a = [3, 1, 2, 5] a.extend([3, 4]) # a = [3, 1, 2, 5, 3, 4]
Одним элементом может быть не только строка или число, но и другой список.
Доступ к элементам
Чтобы получить доступ к элементу, нужно обратиться к нему по индексу. Индекс может быть как положительным, так и отрицательным. При использовании положительного индекса нумерация идет слева-направо, отрицательного — справа-налево.
Пример:
a = [4, 3, 2, 1] print(a[0]) # Выведет 4 print([a[-1]) # Выведет 1 print(a[2:4]) # Выведет [2, 1]
Удаление элементов
Для удаления элементов используются два метода:
- remove(элемент) — ищет и удаляет элемент списка, если в списке содержится несколько одинаковых, то метод удалит первый.
- pop() – удаляет последний элемент списка или с определенным индексом, переданным в качестве аргумента.
Кортеж
Кортеж — упорядоченная коллекция объектов Python, которая очень похожа на список. В кортеже также можно хранить элементы разных типов, различие заключается в том, что кортежи являются неизменяемыми последовательностями.
Программист не может удалить, изменить или добавить новый элемент в уже созданный кортеж. Изменить элемент кортежа нельзя, поэтому при необходимости нужно присвоить переменной новый кортеж.
Создание кортежа
Для создания кортежа используются круглые скобки “()”. Кортеж может быть пустым “()”, а может состоять из одного элемента, чтобы создать кортеж из одного элемента, нужно обязательно добавить после этого элемента запятую.
Пример:
a = (1, 2, 3) b = (1,) # Кортеж из одного элемента c = (1, 3, (2, 4), 4) # Вложенный кортеж
Доступ к элементам
Доступ к кортежу осуществляется по индексу к квадратных скобках, как и списки, кортежи поддерживают доступ по отрицательным индексам:
print(a[0]) # Выведет 1 print(a[-1]) # Выведет 3
Множества
В Python множество — это неупорядоченная изменяемая коллекция данных, которая не содержит повторяющихся элементов. Достоинство множества состоит в том, что проверка, есть ли во множестве определенный элемент, более оптимизирована и занимает меньше времени, чем в списке.
Создание множества
Множества создаются с помощью записи его элементов через запятую в фигурных скобках. Также для этой цели можно использовать функцию set(), в которую передается объект или последовательность. Множество автоматически удаляет совпадающие элементы, оставляя только одно значение:
a = set([1, 2, 3, 3]) print(a) # Выведет 1, 2, 3 b = {1, 3, "data"} print(b) # Выведет {1, 3, 'data'} print(type(b)) # Выведет <class 'set'>
Порядок элементов нельзя определить или изменить, элементы могут быть как одинаковых, так и разных типов.
Добавление элементов
Элементы добавляются с помощью методов: add() и update(). Функция add() может добавить только один элемент за вызов, а update() — несколько. Пример:
a = {1, 2, 3} a.add(4) print(a) # {1, 2, 3, 4} a.update([5, 5, 6]) print(a) # {1, 2, 3, 4, 5, 6}
Доступ к элементам
Получить доступ к элементу по индексу нельзя, потому что множества — неупорядоченные последовательности. Можно перебирать множество циклом for, или искать в нём нужное значение, используя ключевое слово in
.
a = {1, 2, 3} if 2 in a: print('in set')
Удаление элементов
Для удаления элементов используется встроенная функция remove(), однако если попытаться удалить элемент, которого нет в множестве, возбудится исключение KeyError.
Чтобы удалить последний элемент, используют pop(), для удаления всех элементов множества применяется clear().
Словари
Словари — это неупорядоченные коллекции, которые используются для хранения данных вида “ключ : значение” –
Создание словаря
Чтобы создать словарь, используют фигурные скобки “{}”, внутри которых размещаются элементы вида “ключ : значение”, разделенные запятыми. Значения могут иметь любой тип данных и дублироваться, а ключи в пределах одного словаря должны быть уникальны.
Функции dict() также позволяет создать словарь, который может как хранить элементы, так и быть пустым. Пример:
d = {"имя" : "Сергей", "фамилия" : "Сергеев"} print(d["имя"]) # Выведет "Сергей" c = {}; print(c) # Выведет {} print(type(c)) # Выведет <class 'dict'>
Примечание: ключи словаря чувствительны к регистру, то есть одно и то же имя, написанное в разном регистре, может быть разными ключами в одном словаре.
Добавление элементов
Чтобы добавить новый элемент в словарь, нужно создать новый ключ и присвоить ему значение:
Dict["Ключ"] = "Значение"
Если использовать ключ, который уже существует, его значение обновится.
Доступ к элементам
Чтобы получить доступ к элементу словаря, нужно обратиться к его ключу, используя “Имя_словаря[ключ]”.
Удаление элементов
Чтобы удалить элемент, можно воспользоваться ключевым словом del. С его помощью можно удалить как определенные значения, так и весь словарь –
a = {"Один" : "1", "Два" : "2"} del(a["Один"]) print(a) #Выведет {"Два" : "2"}
Если в качестве аргумент передать имя словаря, он полностью удалится, и при попытке обратиться к нему по имени будет вызвано исключение. Чтобы удалить из словаря все элементы, но не удалить сам словарь, можно использовать метод clear().
Логический тип данных
Этот тип данных содержит только два значения: True или False. True – это истина, а False – ложь.
Любой объект может рассматриваться в булевом контексте. Например, 1 — True, а 0 — False. В программировании булева алгебра применяется в условиях, циклах. Результатом любой операции сравнения будет “True” или “False”.
Типы данных в Python — Программирование с нуля
В этом руководстве вы узнаете о различных типах данных, доступных в Python. Так же, мы рассмотрим преобразование типов данных.
Что такое тип данных
Каждое значение в Python имеет тип данных. Поскольку все в языке программирования Python является объектом, типы данных на самом деле являются классами, а переменные являются экземплярами (объектами) этих классов.
В Python есть разные типы данных. Некоторые из важных типов мы рассмотрим ниже.
Числа в Python (int, float)
Целые числа (int), числа с плавающей точкой (float) и комплексные числа (complex) подпадают под категорию чисел Python. Они определены как int, float и complex классы в Python.
Мы можем использовать функцию type(), чтобы узнать, какому классу принадлежит переменная или значение.
a = 5 print(a, "of type", type(a)) 5 of type <class 'int'> b = 2.0 print(b, "of type", type(b)) 2.0 of type <class 'float'> c = 1+2j print(c, "of type", type(c)) (1+2j) of type <class 'complex'>
Целые числа могут быть любой длины, они ограничены только доступной памятью.
Число с плавающей точкой представлены с точностью до 15 десятичных знаков. Целые и плавающие точки разделены десятичными точками. 1 — целое число, 1.0 — число с плавающей запятой.
Комплексные числа записываются в виде x + yj, где x — действительная часть, а y — мнимая часть. Вот несколько примеров.
a = 1234567890123456789 b = 0.1234567890123456789 c = 1+2j
Подробнее числа рассмотрены в нашей статье Числа в Python.
Списки Python (list)
Список — упорядоченная последовательность элементов. Это один из наиболее часто используемых типов данных в Python. Элементы в списке не обязательно должны быть одного типа.
Создать список довольно просто: вы просто пишете значения разделяя их запятыми и помещаете все это в квадратные скобки [] (в других языках такой тип данных называется «массив» (подробнее о «массивах» в Python)).
fruits = ['apple', 'pear', 'banana']
Доступ к элементам списка осуществляется по индексу. Индекс начинается с нуля:
print(fruits[0]) 'apple'
Для того чтобы выбрать элемент с конца списка нужно указать отрицательный индекс:
print(fruits[-1]) 'banana' print(fruits[-3]) 'apple'
Так же можно выбрать диапазон элементов используя срезы, результатом будет новый список:
print(fruits[1:3]) ['pear', 'banana']
В этот список будут включены элементы с индексом 1 и 2.
Значение элементов списков можно менять присваивая им новые значения:
fruits[0] = 'peach' print(fruits) ['peach', 'pear', 'banana']
Подробнее списки рассмотрены в этой статье — Списки в Python.
Кортежи в Python (tuple)
Кортеж — это упорядоченная последовательность элементов, аналогичная списку. Единственное отличие состоит в том, что кортежи являются неизменяемыми. Созданные кортежи не могут быть изменены.
Кортежи используются для защиты данных от записи и, как правило, работают быстрее, чем списки, поскольку они не могут изменяться динамически.
Значения в кортежах так же перечисляются через запятые, но они заключены в круглые скобки ().
cars = ('toyota', 'mazda', 'honda') cars[0] 'toyota'
Доступ к элементам кортежа осуществляется точно так же, как к элементам списка (включая срезы), но как уже было сказано — кортежи неизменяемый тип данных, вы не можете изменить значения так же, как вы меняли их в списках.
Строки в Python (str)
Строка — это последовательность символов Юникода. Для представления строки используются одинарные или двойные кавычки. Несколько строк можно объединить в одну используя тройные кавычки.
message = 'some string content' message2 = "another string content" message3 = '''this is a multiline string content''' message4 = """another multiline string content"""
Так же как в списках или кортежах, строку можно разобрать на символы, используя индекс:
print(message[0]) 's'
Строки в Python являются неизменяемым типом. Это значит что любые операции со строками возвращают результат в виде новой строки, при этом оригинальная строка остается неизменной. Подробнее о работе со строками вы можете почитать в статье Строки в Python.
Множества в Python (set)
Множеством называется несортированная коллекция уникальных значений. Множество состоит из набора значений разделенных запятыми и находящихся внутри фигурных скобок.
numbers = {1, 2, 3, 4, 5}
Над множествами можно производить операции объединения или пересечения. При этом множества содержать только уникальные значения, дубликаты исключаются.
numbers = {1, 1, 2, 2, 3, 3, 4, 4, 5, 5} print(numbers) {1, 2, 3, 4, 5}
Поскольку множества являются неупорядоченными коллекциями, индексация не имеет смысла. Следовательно, оператор среза [] не работает.
Словари в Python (dict)
Словарь (dictionary) — это неупорядоченная коллекция пар ключ-значение.
Обычно используется для большого количества данных где название каждого поля имеет значение. Для того, чтобы извлекать значения из словаря вы должны знать ключ.
В Python словари определены в фигурных скобках {}, где каждый элемент является парой в виде ключ: значение. Ключ и значение могут быть любого типа.
user = {'name': 'Vasya', 'email': '[email protected]'} print(user['name']) 'Vasya'
При обращении к несуществующему ключу интерпретатор выдаст ошибку.
Словари очень похожи на ассоциативные массивы в PHP.
Преобразование типов данных в Python
Мы можем преобразовывать типы данных, используя разные функции преобразования, такие как int(), float(), str() и т. д.
Например так можно преобразовать тип int в float:
float_number = float(5) print(float_number) 5.0
Преобразование числа типа float в int приведет к округлению в сторону нуля:
int_number = int(12.6) print(int_number) 12
При преобразовании строки в число, строка должна содержать подходящее значение:
number = float('12') print(number) 12 get_number = int('4g') Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: '4g'
При попытке преобразования строки ‘4g’ возникла ошибка.
Так же, довольно просто можно преобразовывать последовательности:
print(set([1,2,3])) {1, 2, 3} print(tuple({5,6,7})) (5, 6, 7) print(list('hello')) ['h', 'e', 'l', 'l', 'o']
Осваиваем Python. Унция 1. Типы данных. / Хабр
Продолжаю своё начинание. Данная статья является логическим продолжением первой. Было приятно читать ваши комментарии. Я надеялся, что данный цикл статей окажется для кого-то полезным, но совершенно не предполагал, что заинтересовавшихся будет довольно большое количество. Это заставляет относится к делу серьёзнее и ответственнее.
Без лишних слов, сразу к делу.
Как было сказано ранее, практически всё с чем мы имеем дело, программируя на питоне — это объекты. Типы объектов могут быть либо встроенными, либо описанные программистом с помощью классов. В этой статье речь пойдёт о встроенных типах объектов. Они из себя представляют:
- Числа
- Строки
- Кортежи
- Списки
- Словари
- Множества
Числа, строки и кортежи
Причина того, что эти типы оказались сведёнными в один раздел, кроется в одном очень важном моменте. Без понимания которого можно допустить трудно обнаруживаемые ошибки. Дело в том, что данные типы в отличии от списков и словарей являются неизменяемыми объектами. Т.е. создав их однажды — изменить их значение не представляется возможным. Возникает справедливый вопрос: каким тогда образом работают следующие инструкции?
>>> x = 2
>>> x
2
>>> x = 3
>>> x
3
>>> x = 'string'
>>> x
'string'
Инструкция x = 2 создаёт числовой объект со значением 2 и присваивает ссылку на этот объект переменной x. Далее инструкция x = 3 создаёт новый числовой объект со значением 3 и присваивает ссылку на него переменной x. А объект со значением 2 удаляется из памяти автоматическим сборщиком мусора т.к. была потеряна последняя ссылка на этот объект.
Благодаря этому справедливо следующее:
>>> x = y = 3 # переменные x и y содержат одну и ту же ссылку на объект 3
>>> x = 2 # переменная x теперь содержит ссылку на другой объект 2
>>> x
2
>>> y # y по-прежнему ссылается на объект 3
3
В тему будет упомянуть про оператор is. Этот оператор возвращает значение True, когда слева и справа от него находятся переменные содержащие указатели на один и тот же объект. Возникает вопрос о странном поведении этого оператора:>>> x = 2
>>> y = 2 # создано два разных объекта
>>> x is y # по идее должно быть возвращено значение False
True
Здесь дело в кэширующих внутренних механизмах самого интерпретатора. Для оптимизации скорости выполнения при объявлении числового или короткого строкового объекта — в кэше создаётся пара ссылка и значение. И в дальнейшем при объявлении такого же объекта — не создаётся новый объект, а используется уже созданный. Напрашивается вывод о несостоятельности использования оператора is для числовых и строковых типов данных.
Дальше всё просто!
Типы числовых литералов:
- целые числа неограниченной длины — интерпретатор сам определит необходимость использования объектов неограниченной длины и сделает необходимые преобразования. Более нет необходимости следить за переполнениями.
- Числа с плавающей точкой
- восьмеричные и шестнадцатеричные числа
- комплексные числа
Некоторые операции над числами:
>>> print 2 ** 150 # 2 в степени 150
1427247692705959881058285969449495136382746624
>>> print int(5.89),round(5.89),round(5.89,1) # округление вниз, вверх, с точностью до 1 знака
5 6.0 5.9
>>> import math
>>> math.pi
3.1415926535897931
>>> print math.sin(math.pi/2)
1.0
>>> import random
>>> random.randint(1,100) # случайное целое число в диапазоне от 1 до 100
19
Строки:
Строки в апострофах и в кавычках — это одно и то же
Строки в тройных кавычках — в тройные кавычки можно заключить целый блок строк, например целиком HTML или XML документ.
Неформатированные строки — строки вида r«\n\t» — последовательности в такой строке не будут заменены на спец. Символы
Строки символов юникода — u’string’ # теряет актуальность в версии 3.0 подробнее об изменениях 3.0
Базовые операции над строками:
>>> print str(len(‘string’))*3 # len() — возвращает количество символов в строке
666 # * — перегруженый оператор, делающий повтор строки указанное число раз
>>> ‘r’ in ‘string’ # оператор in возвращает True если подстрока найдена в строке
True
>>> ‘string’.replace(‘r’,») # замена одной подстроки на другую
‘sting’
>>> ‘string’.find(‘ri’) # возвращает номер смещения искомой подстроки
2
>>> ‘a,b,c’.split(‘,’) # функция разделения на подстроки по указанному символу или подстроке
[‘a’, ‘b’, ‘c’]
Более полную информацию о строковых методах можно получить, введя в интерактивном режиме команду help(str).
Так же строки уже были описаны моим будущим соавтором этого цикла статей тут
Индексирование, выборка и срезы последовательностей данных.
Думаю, о том, что к элементам строки можно получать доступ по их индексам, как в массиве — особо долго рассказывать не нужно.
>>> 'string'[1]
't'
>>> 'string'[-2] # второй элемент с конца строки
'n'
Срез — достаточно мощный инструмент выборки данных из последовательностей, который используется не только в строках но и в коллекциях, речь о которых пойдёт в этой статье чуть ниже.
Общий вид:
S[i:j:h], где S — строка, i — значение смещения, левая граница (включительно), j — значение смещения, правая граница (она не входит в срез), h — значение шага.
Примеры:
>>> ‘string'[0:4]
‘stri’
>>> ‘string'[:-2]
‘stri’
>>> ‘string'[0:5:2]
‘srn’
>>> ‘string'[0:5:-2]
‘nrs’
Говоря о строках, конечно, нельзя забыть о регулярных выражениях. В Python для их использования необходимо импортировать модуль re
Я надеюсь, что о них удастся поговорить отдельно.
Кортежи
Кортеж — это упорядоченная, неизменяемая коллекция объектов произвольных типов, поддерживающая произвольное число уровней вложенности.
Основы синтаксиса так же уже описывал cleg в статье
Списки и словари
Списки и словари являются изменяемыми встроенными типами данных. А это значит, если возвращаться к тому с чего мы начали разговор, что, если создать список Y, затем сделать присваивание X=Y, а затем изменить X, то Y тоже изменится. За этим нужно внимательно следить! Для того, чтобы этого не происходило, необходимо создать новый объект эквивалентный исходному, например, так: X=Y[:]
Иллюстрация:
>>> M = L = range(2,12,3)
>>> print M,L
[2, 5, 8, 11] [2, 5, 8, 11]
>>> L[2] = 112
>>> print M,L
[2, 5, 112, 11] [2, 5, 112, 11]
>>> M = L[:]
>>> L[2] = 0
>>> print M,L
[2, 5, 112, 11] [2, 5, 0, 11]
Или, если требуется обеспечить неизменность созданного объекта — использовать вместо списков кортежи.
Списки — потрясающе гибкий инструмент, представляющий из себя упорядоченную коллекцию элементов, который может включать в себя какие угодно объекты с каким угодно уровнем вложенности.
Словарь — является неупорядоченной коллекцией объектов, доступ к элементам которой предоставляется не с помощью смещения, а с помощью ключа.
За основами синтаксиса так же можно перейти к статье clega
Здесь я лишь внесу некоторые дополнения и замечания по использованию словарей:
- операции над последовательностями неприменимы к словарям т.к. словари — это не последовательность, а отображение.
- Ключи не обязательно должны быть строками. В роли ключей могут выступать любые неизменяемые объекты. Т.е. если рассматривать встроенные типы данных, то — это числа, строки и кортежи. Ясно, что при использования чисел, словарь превращается в подобие списка, однако, остаётся при этом неупорядоченным. Используя в качестве ключа кортежи, появляется возможность использовать составные ключи. Экземпляры пользовательских классов так же могут выступать в качестве ключей при условии, что они реализуют определённые методы указывающие интерпретатору на то, что объект является неизменяемым.
Множества
Множества — это контейнеры для других объектов. Множества создаются встроенной функцией set и поддерживают типичные математические операции над множествами
>>> M = set('habrahabr')
>>> L = set(['h','a','h','a'])
>>> M, L
(set(['a', 'h', 'r', 'b']), set(['a', 'h']))
>>> M & L
set(['a', 'h'])
>>> M | L
set(['a', 'r', 'h', 'b'])
>>> M - L
set(['r', 'b'])
>>> bool(M - L)
True
>>> pusto = set()
>>> bool(pusto)
False
Элементами множества могут стать любые неизменяемые объекты.
После того, как мы проделали определённые операции над множествами — их можно разместить обратно в список, например, так:
>>> S = []
>>> for i in M - L:
... S.append(i)
...
>>> S
['r', 'b']
На этом всё на сегодня.
Пользуясь терминологией Радио-Т хочется задать вопрос 🙂 Куда подкрутить градус гиковости, по вашему мнению? Если вверх, то на мой взгляд, циклы и ветвления стоит раскрыть только с точки зрения особенностей присущих Python.
Спасибо за внимание! Мы продолжим 🙂
Python Типы — перечень типов, встроенных в язык Python. Экопарк Z
Python Типы — число встроенных типов составляет 14-ть: type(None), int, long, float, complex, bool, str, unicode, list, tuple, xrange, dict, set, frozenset.
Само собой разумеется, что названия всех Python Типов должны быть вызубрены назубок, а их смысл досконально понятен.
Привожу информацию про Python Типы из справочника Бизли:
Встроенные типы представления данных
В языке Python существует около десятка встроенных типов данных, которые используются для представления большинства данных в программах. Эти типы сгруппированы в несколько основных категорий, как показано в табл. 3.1.
В колонке «Имя типа» перечислены имена и выражения, которые можно использовать для проверки принадлежности к типу с помощью таких функций, как isinstance().
Некоторые типы данных присутствуют только в версии Python 2 – они отмечены соответствующим образом (в PyPython 3 эти типы не рекомендуются к использованию или были поглощены другими типами).
Таблица 3.1. Встроенные типы представления данных
Категория типов Имя типа Описание None type(None) Пустой объект None Числа int Целые числа long Целые числа произвольной точности (только в Python 2) float Числа с плавающей точкой complex Комплексные числа bool Логические значения (True и False) Последовательности str Строки символов unicode Строки символов Юникода (только в Python 2) list Списки tuple Кортежи xrange Диапазоны целых чисел, создаваемые функцией xrange() (в версии Python 3 называется range) Отображения dict Словари Множества set Изменяемые множества frozenset Неизменяемые множества
По невредной привычке запускаю команду help(type) и получаю такую информацию:
>>> help(type)
Help on class type in module builtins:class type(object)
| type(object_or_name, bases, dict)
| type(object) -> the object’s type
| type(name, bases, dict) -> a new type
|
| Methods defined here:
|
| __call__(self, /, *args, **kwargs)
| Call self as a function.
|
| __delattr__(self, name, /)
| Implement delattr(self, name).
|
| __dir__(…)
| __dir__() -> list
| specialized __dir__ implementation for types
|
| __getattribute__(self, name, /)
| Return getattr(self, name).
|
| __init__(self, /, *args, **kwargs)
| Initialize self. See help(type(self)) for accurate signature.
|
| __instancecheck__(…)
| __instancecheck__() -> bool
| check if an object is an instance
|
| __new__(*args, **kwargs)
| Create and return a new object. See help(type) for accurate signature.
|
| __prepare__(…)
| __prepare__() -> dict
| used to create the namespace for the class statement
|
| __repr__(self, /)
| Return repr(self).
|
| __setattr__(self, name, value, /)
| Implement setattr(self, name, value).
|
| __sizeof__(…)
| __sizeof__() -> int
| return memory consumption of the type object
|
| __subclasscheck__(…)
| __subclasscheck__() -> bool
| check if a class is a subclass
|
| __subclasses__(…)
| __subclasses__() -> list of immediate subclasses
|
| mro(…)
| mro() -> list
| return a type’s method resolution order
|
| ———————————————————————-
| Data descriptors defined here:
|
| __abstractmethods__
|
| __dict__
|
| __text_signature__
|
| ———————————————————————-
| Data and other attributes defined here:
|
| __base__ = <class ‘object’>
| The most base type
|
| __bases__ = (<class ‘object’>,)
|
| __basicsize__ = 864
|
| __dictoffset__ = 264
|
| __flags__ = -2146675712
|
| __itemsize__ = 40
|
| __mro__ = (<class ‘type’>, <class ‘object’>)
|
| __weakrefoffset__ = 368
Так что реализация категории Python Типы не так проста, как её описание!
Сразу вспоминается мудрое высказывание В. И. Ленина об электроне, который так же неисчерпаем, как и атом!
Приглашаю всех высказываться в Комментариях. Критику и обмен опытом одобряю и приветствую. В хороших комментариях сохраняю ссылку на сайт автора!
И не забывайте, пожалуйста, нажимать на кнопки социальных сетей, которые расположены под текстом каждой страницы сайта.
Продолжение тут…
Python 3 — Урок 004. Типы переменных
Переменные — это не что иное, как зарезервированные ячейки памяти для хранения значений. Это означает, что при создании переменной вы резервируете некоторое пространство в памяти.
На основе типа данных переменной интерпретатор выделяет память и решает, что можно сохранить в зарезервированной памяти. Поэтому, присваивая переменным разные типы данных, вы можете хранить целые числа, десятичные знаки или символы в этих переменных.
Присвоение значений переменным
Переменные Python не требуют явного объявления для резервирования пространства памяти. Объявление присваивается автоматически, когда вы присваиваете значение переменной. Знак равенства (=) используется для присвоения значений переменным.
Операнд слева от оператора = является именем переменной, а операнд справа от оператора = является значением, которое хранится в переменной. Например,
#!/usr/bin/python3 counter = 100 # Целочисленная переменная miles = 1000.0 # Переменная с плафающей точкой name = "John" # Строковая переменная print (counter) print (miles) print (name)
Здесь 100, 1000.0 и «John» являются значениями, присвоенными счетчику, милям и переменной имени, соответственно. Это дает следующий результат:
100 1000.0 John
Множественное присвоение
Python позволяет одновременно назначать одно значение нескольким переменным.
Например,
a = b = c = 1
Здесь создается целочисленный объект со значением 1, и все три переменные назначаются в одну и ту же ячейку памяти. Вы также можете назначить несколько объектов нескольким переменным. Например,
a, b, c = 1, 2, "john"
Переменным
a
и
b
присваиваются целочисленные значения
1
и
2
соответсвенно, а переменной
c
присваивается строка
john
.
Стандартные типы данных
Данные, хранящиеся в памяти, могут быть разных типов. Например, возраст человека хранится как числовое значение, а его адрес хранится в виде буквенно-цифровых символов. Python имеет различные стандартные типы данных, которые используются для определения возможных операций и методов хранения для каждого из них.
Python имеет пять стандартных типов данных —
- Числа — Numbers
- Строки — String
- Список — List
- Кортеж — Tuple
- Словарь — Dictionary
Числа Python
Числовые типы данных хранят числовые значения. Числовые объекты создаются при назначении им значения. Например,
var1 = 1 var2 = 10
Вы также можете удалить ссылку на числовой объект, используя оператор del. Синтаксис инструкции del —
del var1[,var2[,var3[....,varN]]]]
Вы можете удалить один объект или несколько объектов, используя инструкцию del.
Например,
del var del var_a, var_b
Python поддерживает три разных числовых типа —
- int (целые числа со знаком)
- float (реальные значения с плавающей запятой)
- complex (комплексные числа)
Все целые числа в Python3 представлены как long числа. Следовательно, нет отдельного типа long.
Примеры
int | float | complex |
---|---|---|
10 | 0.0 | 3.14j |
100 | 15.20 | 45.j |
-786 | -21.9 | 9.322e-36j |
080 | 32.3+e18 | .876j |
-0490 | -90. | -.6545+0J |
-0x260 | -32.54e100 | 3e+26J |
0x69 | 70.2-E12 | 4.53e-7j |
Комплексное число состоит из упорядоченной пары вещественных чисел с плавающей запятой, обозначаемой x + yj, где x и y — вещественные числа, j — мнимая единица.
Строки Python
Строки в Python идентифицируются как непрерывный набор символов, представленных в кавычках. Python позволяет использовать пару одиночных или двойных кавычек. Подмножества строк могут быть взяты с использованием оператора среза ([] и [:]) с индексами, начинающимися с 0 в начале строки и работающими от -1 до конца.
Знак плюс (+) является оператором конкатенации строк, а звездочкой (*) является оператор повторения. Например,
#!/usr/bin/python3 str = 'Hello World!' print (str) # Вывод всей строки print (str[0]) # Вывод первого символа строки print (str[2:5]) # Вывод символов с третьего по пятый print (str[2:]) # Вывод строки с третьего символа print (str * 2) # Вывод строки дважды print (str + "TEST") # Вывод склеенной строки
Это приведет к следующему результату —
Hello World! H llo llo World! Hello World!Hello World! Hello World!TEST
Списки Python
Списки являются наиболее универсальными составными типами данных Python. Список содержит элементы, разделенные запятыми и заключенные в квадратные скобки ([]). В некоторой степени списки аналогичны массивам в C. Одно из различий между ними состоит в том, что все элементы, принадлежащие списку, могут быть разных типов данных.
Доступ к значениям, хранящимся в списке, можно получить с помощью оператора среза ([] и [:]) с индексами, начинающимися с 0 в начале списка и заканчивающимися -1. Знак плюс (+) — это оператор конкатенации списка, а звездочка (*) — оператор повторения. Например,
#!/usr/bin/python3 list = [ 'abcd', 786 , 2.23, 'john', 70.2 ] tinylist = [123, 'john'] print (list) # Вывод всего списка print (list[0]) # Вывод первого элемента списка print (list[1:3]) # Вывод элементов со второго по третий print (list[2:]) # Вывод элементов начиная с третьего print (tinylist * 2) # Вывод списка дважды print (list + tinylist) # Вывод результирующего списка
Это приведет к следующему результату —
['abcd', 786, 2.23, 'john', 70.200000000000003] abcd [786, 2.23] [2.23, 'john', 70.200000000000003] [123, 'john', 123, 'john'] ['abcd', 786, 2.23, 'john', 70.200000000000003, 123, 'john']
Кортежи Python
Кортеж — это другой тип данных последовательности, аналогичный списку. Кортеж состоит из нескольких значений, разделенных запятыми. Однако, в отличие от списков, кортежи заключены в круглые скобки.
Основное различие между списками и кортежами — Списки заключены в скобки ([]), и их элементы и размер могут быть изменены, а кортежи заключены в круглые скобки (()) и не могут быть обновлены. Кортежи можно рассматривать как списки только для чтения. Например,
#!/usr/bin/python3 tuple = ( 'abcd', 786 , 2.23, 'john', 70.2 ) tinytuple = (123, 'john') print (tuple) # Вывод всего кортежа print (tuple[0]) # Вывод первого элемента в кортеже print (tuple[1:3]) # вывод элементов со второго по третий print (tuple[2:]) # Вывод элементов кортежа с третьего print (tinytuple * 2) # Вывод кортежа дважды print (tuple + tinytuple) # Вывод результирующего кортежа
Это приведет к следующему результату —
('abcd', 786, 2.23, 'john', 70.200000000000003) abcd (786, 2.23) (2.23, 'john', 70.200000000000003) (123, 'john', 123, 'john') ('abcd', 786, 2.23, 'john', 70.200000000000003, 123, 'john')
Следующий код недопустим с кортежем, потому что мы попытались обновить кортеж, что запрещено. Подобный случай возможен со списками —
#!/usr/bin/python3 tuple = ( 'abcd', 786 , 2.23, 'john', 70.2 ) list = [ 'abcd', 786 , 2.23, 'john', 70.2 ] tuple[2] = 1000 # запрещено для кортежей list[2] = 1000 # допустимо для списков
Словари Python
Словарь Python — это тип хеш-таблицы. Они работают как ассоциативные массивы или хэши, как в Perl, и состоят из пар ключ-значение. Ключ словаря может быть почти любым типом Python, но обычно это числа или строки. Значения, с другой стороны, могут быть любым произвольным объектом Python.
Словари заключены в фигурные скобки ({}), и значения могут быть получены с помощью квадратных скобок ([]). Например,
#!/usr/bin/python3 dict = {} dict['one'] = "This is one" dict[2] = "This is two" tinydict = {'name': 'john','code':6734, 'dept': 'sales'} print (dict['one']) # Вывод значения для ключа 'one' print (dict[2]) # Вывод значения для клюса 2 print (tinydict) # Вывод всего словаря print (tinydict.keys()) # Вывод всез ключей словаря print (tinydict.values()) # Вывод всех значений
Это приведет к следующему результату —
This is one This is two {'name': 'john', 'dept': 'sales', 'code': 6734} dict_keys(['name', 'dept', 'code']) dict_values(['john', 'sales', 6734])
Словари не имеют понятия об упорядочивании среди элементов.
Преобразование типа данных
Иногда вам может потребоваться выполнить преобразования между встроенными типами. Чтобы преобразовать типы, вы просто используете имена типов как функцию.
Существует несколько встроенных функций для преобразования из одного типа данных в другой. Эти функции возвращают новый объект, представляющий преобразованное значение.
S.No. | Функция & Описание |
---|---|
1 |
Преобразует x в целое число. |
2 |
Преобразует x в число с плавающей запятой. |
3 |
Создает комплексное число. |
4 |
Преобразует объект x в строковое представление. |
5 |
Преобразует объект x в строковое выражение. |
6 |
Обрабатывает строку и возвращает объект. Используется для выполнения программного кода представленного сторокой. |
7 |
Преобразует s в кортеж. |
8 |
Преобразует s в список. |
9 |
Преобразует s в набор. |
10 |
Создает словарь. d должен быть последовательностью (ключ, значение) кортежей. |
11 |
Преобразует s в неизменяемый набор. |
12 |
Преобразует целое число в символ. |
13 |
Преобразует целое число в символ Unicode. |
14 |
Преобразует один символ в его целочисленное значение. |
15 |
Преобразует целое число в шестнадцатеричную строку. |
16 |
Преобразует целое число в восьмеричную строку. |
Python | Переменные и типы данных
Переменные и типы данных
Последнее обновление: 10.09.2019
Переменная хранит определенные данные. Название переменной в Python должно начинаться с алфавитного символа или со знака подчеркивания и может
содержать алфавитно-цифровые символы и знак подчеркивания. И кроме того, название переменной не должно совпадать с названием ключевых слов языка Python.
Ключевых слов не так много, их легко запомнить: and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global,
if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield.
Например, создадим переменную:
name = "Tom"
Здесь определена переменная name
, которая хранит строку «Tom».
В пайтоне применяется два типа наименования переменных: camel case и underscore notation.
Camel case подразумевает, что каждое новое подслово в наименовании переменной начинается с большой буквы. Например:
userName = "Tom"
Underscore notation подразумевает, что подслова в наименовании переменной разделяются знаком подчеркивания. Например:
user_name = "Tom"
И также надо учитывать регистрозависимость, поэтому переменные name
и Name
будут представлять разные объекты.
Переменная хранит данные одного из типов данных. В Python существует множество различных типов данных, которые подразделяются на категории:
числа, последовательности, словари, наборы:
boolean — логическое значение
True
илиFalse
int — представляет целое число, например, 1, 4, 8, 50.
float — представляет число с плавающей точкой, например, 1.2 или 34.76
complex — комплексные числа
str — строки, например «hello». В Python 3.x строки представляют набор символов в кодировке Unicode
bytes — последовательность чисел в диапазоне 0-255
byte array — массив байтов, аналогичен bytes с тем отличием, что может изменяться
list — список
tuple — кортеж
set — неупорядоченная коллекция уникальных объектов
frozen set — то же самое, что и set, только не может изменяться (immutable)
dict — словарь, где каждый элемент имеет ключ и значение
Python является языком с динамической типизацией. Он определяет тип данных переменной исходя из значения, которое ей присвоено. Так, при
присвоении строки в двойных или одинарных кавычках переменная имеет тип str. При присвоении целого числа
Python автоматически определяет тип переменной как int. Чтобы определить переменную как объект float, ей присваивается дробное число, в котором разделителем
целой и дробной части является точка. Число с плавающей точкой можно определять в экспоненциальной записи:
x = 3.9e3 print(x) # 3900.0 x = 3.9e-3 print(x) # 0.0039
Число float может иметь только 18 значимых симолов. Так, в данном случае используются только два символа — 3.9. И если число слишком велико или
слишком мало, то мы можем записывать число в подобной нотации, используя экспоненту. Число после экспоненты указывает степень числа 10, на которое надо умножить основное число — 3.9.
При этом в процессе работы программы мы можем изменить тип переменной, присвоив ей значение другого типа:
user_id = "12tomsmith538" # тип str print(user_id) user_id = 234 # тип int print(user_id)
С помощью функции type() динамически можно узнать текущий тип переменной:
user_id = "12tomsmith538" print(type(user_id)) # <class 'str'> user_id = 234 print(type(user_id)) # <class 'int'>
5. Встроенные типы — документация Python 2.7.18
В следующих разделах описаны стандартные типы, встроенные в
переводчик.
Примечание
Исторически (до выпуска 2.2) встроенные типы Python отличались от
определяемые пользователем типы, потому что было невозможно использовать встроенные типы в качестве
основа для объектно-ориентированного наследования. Это ограничение больше не
существует.
Основными встроенными типами являются числа, последовательности, сопоставления, файлы, классы,
экземпляры и исключения.
Некоторые операции поддерживаются несколькими типами объектов; в частности,
практически все объекты можно сравнивать, проверять на истинность и преобразовывать
в строку (с функцией repr () или немного другим
str ()
функция). Последняя функция неявно используется, когда объект
написано функцией print ()
.
5.1. Проверка истинности
Любой объект может быть протестирован на истинность для использования в , если
или
, а
— условие или как операнд логических операций ниже.В
следующие значения считаются ложными:
Нет
Неверно
ноль любого числового типа, например
0
,0L
,0,0
,0j
.любая пустая последовательность, например
''
,()
,[]
.любое пустое отображение, например
{}
.экземпляров пользовательских классов, если класс определяет
__nonzero __ ()
или метод__len __ ()
, когда этот метод возвращает целое число ноль или
bool
значениеЛожь
.
Все остальные значения считаются истинными, поэтому объекты многих типов всегда
правда.
Операции и встроенные функции с логическим результатом всегда возвращают 0
или False
для false и 1
или True
для true, если не указано иное.
(Важное исключение: логические операции или
, и
всегда возвращают
один из их операндов.)
5.2. Логические операции — и
, или
, не
Это логические операции, упорядоченные по возрастанию приоритета:
Эксплуатация | Результат | Банкноты |
---|---|---|
| если x ложно, то y , иначе | (1) |
| , если x ложно, то x , иначе | (2) |
| если x ложно, то | (3) |
Примечания:
Это оператор короткого замыкания, поэтому он оценивает только второй
аргумент, если первый неверен.Это оператор короткого замыкания, поэтому он оценивает только второй
аргумент, если первое верно.not
имеет более низкий приоритет, чем небулевы операторы, поэтомуnot a == b
является
интерпретируется какnot (a == b)
, аa == not b
является синтаксической ошибкой.
5.3. Сравнения
Операции сравнения поддерживаются всеми объектами. У всех они одинаковые
приоритет (который выше, чем у логических операций).Сравнения могут
быть скованным произвольно; например, x
x
оценивается вообще, когда x
В этой таблице приведены операции сравнения:
Эксплуатация | Значение | Банкноты |
---|---|---|
| строго меньше | |
| меньше или равно | |
| строго больше | |
| больше или равно | |
| равно | |
| не равно | (1) |
| идентификация объекта | |
| Отрицательная идентичность объекта |
Примечания:
! =
также можно записать<>
, но это устаревшее использование
сохранен только для обратной совместимости.В новом коде всегда следует использовать
! =
.
Объекты разных типов, кроме разных числовых типов и разных строк
типы, никогда не сравнивайте равных; такие объекты заказываются последовательно, но
произвольно (чтобы сортировка разнородного массива давала согласованный результат).
Более того, некоторые типы (например, файловые объекты) поддерживают только вырожденный
понятие сравнения, когда любые два объекта этого типа не равны. Еще раз,
такие объекты располагаются произвольно, но последовательно. <
, <=
, >
и операторы > =
вызовут исключение TypeError
, когда любой операнд
комплексное число.
Неидентичные экземпляры класса обычно сравниваются как не равные, если только
class определяет метод __eq __ ()
или метод __cmp __ ()
.
Экземпляры класса не могут быть упорядочены по отношению к другим экземплярам класса
того же класса или других типов объектов, если только класс не определяет достаточно
богатые методы сравнения ( __lt __ ()
, __le __ ()
, __gt __ ()
и
__ge __ ()
) или __cmp __ ()
.
Детали реализации CPython: Объекты разных типов, кроме чисел, упорядочены по именам типов;
объекты одного типа, не поддерживающие правильное сравнение, упорядочиваются по
их адрес.
Еще две операции с тем же синтаксическим приоритетом: в
и не в
.
поддерживается только типами последовательности (см. ниже).
.Встроенные типы
- документация Python 3.8.6
В следующих разделах описаны стандартные типы, встроенные в
переводчик.
Основными встроенными типами являются числа, последовательности, сопоставления, классы,
экземпляры и исключения.
Некоторые классы коллекций изменяемы. Методы сложения, вычитания или
переставить своих участников на место и не возвращать конкретный предмет, никогда не возвращать
сам экземпляр коллекции, но Нет
.
Некоторые операции поддерживаются несколькими типами объектов; в частности,
практически все объекты можно сравнить на равенство, проверить на истинность
значение и преобразован в строку (с помощью функции repr ()
или
немного другая функция str ()
).Последняя функция неявно
используется, когда объект записывается функцией print ()
.
Проверка истинности
Любой объект может быть протестирован на истинность, для использования в , если
или
при условии
или в качестве операнда логических операций ниже.
По умолчанию объект считается истинным, если его класс не определяет
__bool __ ()
, который возвращает False
или метод __len __ ()
, который
возвращает ноль при вызове с объектом.Вот большинство встроенных
объектов, считающихся ложными:
константы, определенные как ложные:
Нет
иЛожь
.ноль любого числового типа:
0
,0,0
,0j
,Десятичный (0)
,
Дробь (0, 1)
пустые последовательности и коллекции:
''
,()
,[]
,{}
,set ()
,
диапазон (0)
Операции и встроенные функции, которые имеют логический результат, всегда возвращают 0
или False
для false и 1
или True
для true, если не указано иное.(Важное исключение: логические операции или
, и
всегда возвращают
один из их операндов.)
Логические операции - и
, или
, не
Это логические операции, упорядоченные по возрастанию приоритета:
Эксплуатация | Результат | Банкноты |
---|---|---|
| если x ложно, то y , иначе | (1) |
| если x ложно, то x , иначе | (2) |
| если x ложно, то | (3) |
Примечания:
Это оператор короткого замыкания, поэтому он оценивает только второй
аргумент, если первый неверен.Это оператор короткого замыкания, поэтому он оценивает только второй
аргумент, если первое верно.not
имеет более низкий приоритет, чем небулевы операторы, поэтомуnot a == b
является
интерпретируется какне (a == b)
, аa == not b
является синтаксической ошибкой.
Сравнения
В Python есть восемь операций сравнения. У всех они одинаковые
приоритет (который выше, чем у логических операций).Сравнения могут
быть скованным произвольно; например, x
x
оценивается вообще, когда x
В этой таблице приведены операции сравнения:
Эксплуатация | Значение |
---|---|
| строго меньше |
| меньше или равно |
| строго больше |
| больше или равно |
| равно |
| не равно |
| идентификация объекта |
| Отрицательная идентичность объекта |
Объекты разных типов, кроме разных числовых типов, никогда не сравниваются равными.Оператор ==
определяется всегда, но для некоторых типов объектов (например,
class objects) эквивалентно равно
. <
, <=
, >
и > =
операторы определяются только там, где они имеют смысл; например, они поднимают
TypeError
исключение, когда один из аргументов является комплексным числом.
Неидентичные экземпляры класса обычно сравниваются как не равные, если только
class определяет метод __eq __ ()
.
Экземпляры класса не могут быть упорядочены по отношению к другим экземплярам класса
того же класса или других типов объектов, если только класс не определяет достаточно
методы __lt __ ()
, __le __ ()
, __gt __ ()
и __ge __ ()
(in
в общем, __lt __ ()
и __eq __ ()
достаточно, если вы хотите
общепринятые значения операторов сравнения).
Поведение -
, а - нет.
операторов не могут быть
индивидуальные; также они могут применяться к любым двум объектам и никогда не вызывать
исключение.
Еще две операции с таким же синтаксическим приоритетом, в
и
не в
, поддерживаются итеративными или повторяющимися типами.
реализовать метод __contains __ ()
.
.Набор текста
- Поддержка подсказок типа - документация Python 3.8.6
Исходный код: Lib / typing.py
Примечание
Среда выполнения Python не применяет аннотации типов функций и переменных.
Они могут использоваться сторонними инструментами, такими как средства проверки типов, IDE, линтеры,
пр.
Этот модуль обеспечивает поддержку во время выполнения для подсказок типов, как указано
PEP 484 , PEP 526 , PEP 544 , PEP 586 , PEP 589 и PEP 591 .Самая фундаментальная опора состоит из типов Any
, Union ,
Tuple
, Callable
, TypeVar
и
Общий
. Для полной спецификации см. PEP 484 . За
упрощенное введение в подсказки типов см. PEP 483 .
Функция ниже принимает и возвращает строку и аннотируется следующим образом:
def приветствие (name: str) -> str: вернуть 'Hello' + имя
В функции приветствие
ожидается, что аргумент имя
будет иметь тип
str
и тип возврата str
.Подтипы принимаются как
аргументы.
Псевдонимы типов
Псевдоним типа определяется путем присвоения типа псевдониму. В этом примере
Vector
и List [float]
будут рассматриваться как взаимозаменяемые синонимы:
из списка импорта Вектор = Список [float] def scale (scalar: float, vector: Vector) -> Vector: return [скаляр * число для числа в векторе] # проверки типов; список чисел с плавающей запятой квалифицируется как вектор. новый_вектор = масштаб (2,0; [1,0; -4,2; 5.4])
Псевдонимы типа полезны для упрощения сигнатур сложных типов. Например:
от ввода import Dict, Tuple, Sequence ConnectionOptions = Dict [str, str] Адрес = Кортеж [str, int] Сервер = кортеж [адрес, параметры подключения] def broadcast_message (сообщение: str, серверы: Sequence [Server]) -> None: ... # Средство проверки статического типа будет рассматривать подпись предыдущего типа как # в точности эквивалентен этому. def broadcast_message ( сообщение: str, серверы: Последовательность [Tuple [Tuple [str, int], Dict [str, str]]]) -> None: ...
Обратите внимание, что Нет
в качестве подсказки типа является особым случаем и заменяется на
Тип (Нет)
.
Новый Тип
Используйте вспомогательную функцию NewType ()
для создания отдельных типов:
от ввода импорта NewType UserId = NewType ('UserId', целое число) some_id = UserId (524313)
Средство проверки статического типа будет рассматривать новый тип, как если бы он был подклассом.
оригинального типа. Это полезно для выявления логических ошибок:
def get_user_name (user_id: UserId) -> str: ... # проверки типов user_a = get_user_name (UserId (42351)) # не проверяет типы; int не является UserId user_b = get_user_name (-1)
Вы по-прежнему можете выполнять все операции int
с переменной типа UserId
,
но результат всегда будет иметь тип int
. Это позволяет вам пройти
UserId
везде, где можно было бы ожидать int
, но не позволит вам
случайное создание UserId
недопустимым способом:
# 'output' имеет тип 'int', а не 'UserId' вывод = UserId (23413) + UserId (54341)
Обратите внимание, что эти проверки выполняются только средством проверки статического типа.Во время выполнения
оператор Derived = NewType ('Derived', Base)
сделает Derived
a
функция, которая немедленно возвращает любой переданный вами параметр. Это значит
выражение Derived (some_value)
не создает новый класс и не вводит
любые накладные расходы помимо обычного вызова функции.
Точнее, выражение some_value is Derived (some_value)
всегда
верно во время выполнения.
Это также означает, что невозможно создать подтип Производный
поскольку это функция идентификации во время выполнения, а не фактический тип:
от ввода импорта NewType UserId = NewType ('UserId', целое число) # Не работает во время выполнения и не проверяет тип класс AdminUserId (UserId): пройти
Однако можно создать NewType ()
на основе «производного» NewType
:
от ввода импорта NewType UserId = NewType ('UserId', целое число) ProUserId = NewType ('ProUserId'
.Типы
- создание динамических типов и имена для встроенных типов - документация Python 3.8.6
Исходный код: Lib / types.py
Этот модуль определяет служебные функции для помощи в динамическом создании
новые виды.
Он также определяет имена для некоторых типов объектов, которые используются в стандарте.
Интерпретатор Python, но не отображается как встроенная функция, например int
или
ул
сот.
Наконец, он предоставляет некоторые дополнительные служебные классы и функции, относящиеся к типам.
которые недостаточно фундаментальны, чтобы быть встроенными.
Создание динамического типа
-
типов.
new_class
( имя , base = () , kwds = None , exec_body = None ) Динамически создает объект класса с использованием соответствующего метакласса.
Первые три аргумента - это компоненты, составляющие класс
заголовок определения: имя класса, базовые классы (по порядку),
аргументы ключевого слова (например, метаклассАргумент exec_body - это обратный вызов, который используется для заполнения
только что созданное пространство имен класса.Он должен принимать пространство имен класса
в качестве единственного аргумента и обновите пространство имен напрямую с помощью класса
содержание. Если обратный вызов не указан, он имеет тот же эффект, что и передача
влямбда нс: нс
.
-
типов.
prepare_class
( имя , баз = () , kwds = Нет ) Вычисляет соответствующий метакласс и создает пространство имен класса.
Аргументы - это компоненты, составляющие заголовок определения класса:
имя класса, базовые классы (по порядку) и аргументы ключевого слова
(например, метаклассВозвращаемое значение - это 3 кортежа: метакласс
, пространство имен, kwds
метакласс - соответствующий метакласс, пространство имен -
подготовленное пространство имен класса, а kwds - обновленная копия переданного
в аргументе kwds с удаленной записью«метакласс»
. Если нет кВт
передан аргумент, это будет пустой dict.Изменено в версии 3.6: значение по умолчанию для элемента пространства имен
кортеж изменился.Теперь отображение, сохраняющее порядок вставки
используется, когда метакласс не имеет метода__prepare__
.
См. Также
- Метаклассы
Полная информация о процессе создания класса, поддерживаемом этими функциями
- PEP 3115 - Метаклассы в Python 3000
Представлен обработчик пространства имен
__prepare__
-
типов.
resolve_bases
( баз ) Разрешить записи MRO динамически, как указано в PEP 560 .
Эта функция ищет элементы в базах , которые не являются экземплярами
тип
и возвращает кортеж, в котором каждый такой объект, имеющий
метод__mro_entries__
заменяется распакованным результатом
вызов этого метода. Если элемент base является экземпляромтипа
,
или у него нет метода__mro_entries__
, тогда он включается в
возвращаемый кортеж без изменений.
См. Также
PEP 560 - Основная поддержка для модуля ввода и универсальных типов
Стандартные типы переводчиков
Этот модуль предоставляет имена для многих типов, необходимых для
реализовать интерпретатор Python.Он намеренно избегает включения некоторых из
типы, которые возникают только случайно во время обработки, такие как
Листитератор типа
.
Обычно эти имена используются для isinstance ()
или
issubclass ()
проверяет.
Если вы создаете экземпляр любого из этих типов, обратите внимание, что сигнатуры могут различаться в разных версиях Python.
Стандартные наименования определены для следующих типов:
-
типов.
Тип функции
-
типов.
Тип лямбда
Тип пользовательских функций и функций, созданных
лямбда
выражений.
-
типов.
Тип генератора
Тип объектов генератор-итератор, создаваемых
генераторные функции.
-
типов.
CoroutineType
Тип объектов сопрограмм, созданных
async def
functions.
-
типов.
AsyncGeneratorType
Тип объектов асинхронного генератора-итератора, создаваемых
функции асинхронного генератора.
- класс
типов.
CodeType
( ** kwargs ) Тип для объектов кода, таких как возвращаемый функцией
compile ()
.Вызывает событие аудита
code .__ new__
с аргументамиcode
,filename
,name
,argcount
,posonlyargcount
,kwonlyargcount
,nlocals
,stacksize
,flags
.Обратите внимание, что проверенные аргументы могут не совпадать с именами или позициями
требуется инициализатором.-
заменяет
( ** kwargs ) Вернуть копию объекта кода с новыми значениями для указанных полей.
-
-
типов.
Тип ячейки
Тип для объектов ячеек: такие объекты используются как контейнеры для
свободные переменные функции.
-
типов.
Тип метода
Тип методов экземпляров пользовательского класса.
-
типов.
Тип встроенной функции
-
типов.
Тип встроенного метода
Тип встроенных функций, таких как
len ()
илиsys.exit ()
, и
методы встроенных классов. (Здесь термин «встроенный» означает «написано на
C ».)
-
типов.
WrapperDescriptorType
Тип методов некоторых встроенных типов данных и базовых классов, таких как
.