Введение
В этом практическом занятии (лабораторной работе) вы научитесь проверять, содержит ли список элементы определенного типа в Python. Это включает в себя понимание концепции проверки типов, которая является важной для написания надежного и поддерживаемого кода в динамически типизированной среде Python.
Вы изучите базовые типы данных Python и используете функцию type() для определения типа переменных. В рамках практического занятия (лабораторной работы) вас будут сопровождать по созданию скрипта на Python для демонстрации проверки типов, а затем будут представлены функция isinstance() вместе с функцией all() для проверки, являются ли все элементы списка нужного типа.
Изучите проверку типов
На этом этапе мы рассмотрим концепцию проверки типов в Python. Проверка типов - это процесс подтверждения того, что типы значений, используемых в программе, соответствуют ожидаемым. Python - это динамически типизированный язык, что означает, что проверка типов в основном выполняется во время выполнения программы. Однако понимание того, как проверять типы и убедиться, что они корректны, является важным для написания надежного и поддерживаемого кода.
Начнем с понимания базовых типов данных в Python:
- int: Представляет целые числа (например, 1, 2, -5).
- float: Представляет числа с плавающей точкой (например, 3.14, 2.0).
- str: Представляет строки (текст) (например, "hello", "world").
- bool: Представляет булевы значения (True или False).
- list: Представляет упорядоченную коллекцию элементов (например,
[1, 2, 3]). - tuple: Представляет упорядоченную неизменяемую коллекцию элементов (например,
(1, 2, 3)). - dict: Представляет коллекцию пар ключ - значение (например,
{"name": "Alice", "age": 30}).
Для проверки типа переменной можно использовать функцию type(). Создадим скрипт на Python, чтобы продемонстрировать это.
Откройте редактор VS Code в среде LabEx.
Создайте новый файл с именем
type_checking.pyв директории~/project.~/project/type_checking.pyДобавьте следующий код в файл
type_checking.py:## Assign values to different variables x = 10 y = 3.14 name = "Bob" is_valid = True my_list = [1, 2, 3] my_tuple = (4, 5, 6) my_dict = {"key": "value"} ## Print the type of each variable print(f"Type of x: {type(x)}") print(f"Type of y: {type(y)}") print(f"Type of name: {type(name)}") print(f"Type of is_valid: {type(is_valid)}") print(f"Type of my_list: {type(my_list)}") print(f"Type of my_tuple: {type(my_tuple)}") print(f"Type of my_dict: {type(my_dict)}")Этот скрипт присваивает переменным значения разных типов, а затем использует функцию
type()для вывода типа каждой переменной.Запустите скрипт с помощью команды
pythonв терминале:python ~/project/type_checking.pyВы должны увидеть вывод, похожий на следующий:
Type of x: <class 'int'> Type of y: <class 'float'> Type of name: <class 'str'> Type of is_valid: <class 'bool'> Type of my_list: <class 'list'> Type of my_tuple: <class 'tuple'> Type of my_dict: <class 'dict'>Этот вывод показывает тип каждой переменной, подтверждая, что Python правильно определяет тип каждого значения.
Понимание типов ваших переменных является важным для правильного выполнения операций. Например, нельзя напрямую добавить строку к целому числу без предварительного преобразования строки в целое число.
## Example of type error
x = 10
name = "Bob"
## This will raise a TypeError
## result = x + name
Если вы раскомментируете последнюю строку в скрипте, вы столкнетесь с ошибкой TypeError, потому что Python не знает, как добавить целое число и строку.
Чтобы исправить это, вам нужно будет преобразовать целое число в строку или наоборот, в зависимости от желаемого результата.
## Convert integer to string
x = 10
name = "Bob"
result = str(x) + name
print(result) ## Output: 10Bob
В следующих шагах мы рассмотрим более продвинутые методы проверки типов и обеспечения соответствия типов в вашем коде на Python.
Используйте функцию all() с функцией isinstance()
На этом этапе мы научимся использовать функцию all() в сочетании с функцией isinstance() для более сложной проверки типов в коллекциях данных. Это особенно полезно, когда вам нужно убедиться, что все элементы в списке, кортеже или другом итерируемом объекте имеют определенный тип.
Функция isinstance() используется для проверки, является ли объект экземпляром определенного класса или типа. Она принимает два аргумента: объект, который нужно проверить, и тип, с которым нужно сравнить. Функция возвращает True, если объект является экземпляром указанного типа, и False в противном случае.
Функция all() используется для проверки, являются ли все элементы в итерируемом объекте истинными. Она принимает один аргумент: итерируемый объект (например, список, кортеж или множество). Функция возвращает True, если все элементы в итерируемом объекте истинны, и False в противном случае.
Объединив эти две функции, мы можем легко проверить, имеют ли все элементы в коллекции определенный тип.
Откройте редактор VS Code в среде LabEx.
Создайте новый файл с именем
type_checking_all.pyв директории~/project.~/project/type_checking_all.pyДобавьте следующий код в файл
type_checking_all.py:## List of values values = [1, 2, 3, 4, 5] ## Check if all values are integers all_integers = all(isinstance(x, int) for x in values) ## Print the result print(f"Are all values integers? {all_integers}") ## List with mixed types mixed_values = [1, 2, "3", 4, 5] ## Check if all values are integers all_integers_mixed = all(isinstance(x, int) for x in mixed_values) ## Print the result print(f"Are all values integers in mixed_values? {all_integers_mixed}") ## List of strings string_values = ["a", "b", "c"] ## Check if all values are strings all_strings = all(isinstance(x, str) for x in string_values) ## Print the result print(f"Are all values strings? {all_strings}")Этот скрипт демонстрирует, как использовать функции
all()иisinstance()для проверки типов элементов в списке.Запустите скрипт с помощью команды
pythonв терминале:python ~/project/type_checking_all.pyВы должны увидеть вывод, похожий на следующий:
Are all values integers? True Are all values integers in mixed_values? False Are all values strings? TrueЭтот вывод показывает, что функция
all()правильно определяет, являются ли все элементы в списке указанного типа.
Разберем, как это работает:
isinstance(x, int)проверяет, является ли элементxцелым числом.(isinstance(x, int) for x in values)- это генераторное выражение, которое возвращаетTrueилиFalseдля каждого элемента в спискеvalues.all(...)затем проверяет, являются ли все значения, возвращаемые генераторным выражением,True.
Этот подход очень гибкий и может быть использован для проверки любого типа или комбинации типов в коллекции.
Укажите желаемый тип
На этом этапе мы рассмотрим, как указывать желаемый тип для переменных и аргументов функций, а также как применять эти типы с помощью подсказок типов (type hints) и условных проверок. Хотя Python - это динамически типизированный язык, подсказки типов позволяют добавить статическую информацию о типах в ваш код, которую можно использовать инструментами для проверки типов, такими как mypy, чтобы выявить ошибки типов до запуска программы.
Подсказки типов - это аннотации, которые указывают ожидаемый тип переменной, аргумента функции или возвращаемого значения функции. Они записываются с использованием синтаксиса : для переменных и аргументов и синтаксиса -> для возвращаемых значений.
Начнем с добавления подсказок типов в наш предыдущий пример.
Откройте редактор VS Code в среде LabEx.
Создайте новый файл с именем
type_hints.pyв директории~/project.~/project/type_hints.pyДобавьте следующий код в файл
type_hints.py:def add_numbers(x: int, y: int) -> int: """Adds two numbers together.""" return x + y ## Example usage result: int = add_numbers(5, 3) print(f"Result: {result}") ## Example with incorrect types ## This will not raise an error at runtime, but a type checker will flag it ## result: int = add_numbers("5", "3") ## print(f"Result: {result}")В этом скрипте:
x: intиy: intуказывают, что аргументыxиyдолжны быть целыми числами.-> intуказывает, что функцияadd_numbersдолжна возвращать целое число.result: intуказывает, что переменнаяresultдолжна быть целым числом.
Запустите скрипт с помощью команды
pythonв терминале:python ~/project/type_hints.pyВы должны увидеть вывод, похожий на следующий:
Result: 8Скрипт запускается без ошибок, так как типы указаны правильно. Однако, если вы раскомментируете строки с неправильными типами, скрипт все еще будет запускаться, но инструмент для проверки типов, такой как
mypy, будет помечать эти строки как ошибки типов.
Для установки и запуска mypy вы можете использовать следующие команды:
pip install mypy
mypy ~/project/type_hints.py
Поскольку pip не предварительно настроен, вы можете столкнуться с ошибками, связанными с отсутствием пакетов или неправильными версиями. В рамках этого практического занятия мы сосредоточимся на демонстрации концепции подсказок типов и условных проверок.
Другой способ применить типы - использовать условные проверки в вашем коде. Это позволяет вызывать исключения, если типы не соответствуют ожиданиям.
def divide_numbers(x, y):
if not isinstance(x, (int, float)):
raise TypeError("x must be a number")
if not isinstance(y, (int, float)):
raise TypeError("y must be a number")
if y == 0:
raise ValueError("y cannot be zero")
return x / y
## Example usage
result = divide_numbers(10, 2)
print(f"Result: {result}")
## Example with incorrect types
## This will raise a TypeError
## result = divide_numbers("10", 2)
## print(f"Result: {result}")
В этом примере мы используем функцию isinstance() для проверки, являются ли x и y числами (целыми или с плавающей точкой). Если они не являются числами, мы вызываем исключение TypeError. Мы также проверяем, равно ли y нулю, и вызываем исключение ValueError, если это так.
Объединяя подсказки типов и условные проверки, вы можете написать более надежный и поддерживаемый код на Python, менее подверженный ошибкам типов.
Резюме
В этом практическом занятии первоначальный этап посвящен пониманию проверки типов в Python, языке с динамической типизацией, где проверка типов в основном происходит во время выполнения программы. В рамках практикума представлены основные типы данных Python, такие как int, float, str, bool, list, tuple и dict.
Затем в практикуме показано, как использовать функцию type() для определения типа данных переменной. Создается Python-скрипт с именем type_checking.py, в котором переменным присваиваются значения разных типов, а затем с помощью функции type() выводятся соответствующие типы.



