Введение
Добро пожаловать в лабораторную работу по встроенным функциям Python. Интерпретатор Python предоставляет богатый набор функций и типов, которые всегда доступны без необходимости импорта каких-либо модулей. Эти функции являются фундаментальными строительными блоками для выполнения общих задач, от манипулирования данными до операций ввода/вывода.
В этой лабораторной работе вы получите практический опыт работы с некоторыми из наиболее важных встроенных функций, сгруппированных по логическим категориям. К концу этой лабораторной работы вы сможете уверенно использовать эти функции для написания более эффективного и читаемого кода на Python.
Преобразование и инспекция типов данных
На этом шаге вы научитесь преобразовывать данные между различными типами и инспектировать объекты с помощью таких функций, как int(), str(), list(), dict(), type() и isinstance(). Эти функции являются фундаментальными для работы с данными в Python.
Примечание: Если вы не знакомы с использованием WebIDE (похожего на VS Code), пожалуйста, изучите его в этой лаборатории.
Сначала откройте файл step1_conversion.py в проводнике файлов слева. Мы будем писать наш код в этом файле.
Добавьте следующий код в step1_conversion.py. Этот код демонстрирует, как преобразовать строку в целое число, кортеж в список и список пар в словарь. Он также показывает, как проверить тип объекта.
## step1_conversion.py
## int(): Возвращает целочисленный (integer) объект из числа или строки.
num_str = "123"
num_int = int(num_str)
print(f"Строка '{num_str}' как целое число: {num_int}")
## str(): Возвращает строковое представление объекта.
int_val = 456
str_val = str(int_val)
print(f"Целое число {int_val} как строка: '{str_val}'")
## list(): Создает новый список из итерируемого объекта (iterable).
my_tuple = ('a', 'b', 'c')
my_list = list(my_tuple)
print(f"Кортеж {my_tuple} как список: {my_list}")
## dict(): Создает новый словарь.
my_pairs = [('x', 1), ('y', 2)]
my_dict = dict(my_pairs)
print(f"Список пар {my_pairs} как словарь: {my_dict}")
## type(): Возвращает тип объекта.
print(f"Тип num_int: {type(num_int)}")
## isinstance(): Возвращает True, если объект является экземпляром класса.
is_list = isinstance(my_list, list)
print(f"Является ли my_list экземпляром list? {is_list}")
Теперь сохраните файл и запустите его из терминала.
python3 step1_conversion.py
Вы должны увидеть следующий вывод, который подтверждает успешное преобразование и инспекцию типов данных.
String '123' as integer: 123
Integer 456 as string: '456'
Tuple ('a', 'b', 'c') as list: ['a', 'b', 'c']
List of pairs [('x', 1), ('y', 2)] as dict: {'x': 1, 'y': 2}
Type of num_int: <class 'int'>
Is my_list an instance of list? True
Математические и числовые операции
На этом шаге вы выполните общие математические вычисления с использованием встроенных функций. Мы рассмотрим abs(), sum(), min(), max(), round() и pow().
Откройте файл step2_math.py в проводнике файлов.
Добавьте следующий код в step2_math.py. Этот скрипт демонстрирует, как применять различные математические функции к числам и спискам чисел.
## step2_math.py
numbers = [5, -10, 15, -2, 8]
## abs(): Возвращает абсолютное значение числа.
print(f"Абсолютное значение -10: {abs(-10)}")
## sum(): Суммирует элементы итерируемого объекта.
print(f"Сумма чисел {numbers}: {sum(numbers)}")
## min(): Возвращает наименьший элемент в итерируемом объекте.
print(f"Минимум чисел: {min(numbers)}")
## max(): Возвращает наибольший элемент в итерируемом объекте.
print(f"Максимум чисел: {max(numbers)}")
## round(): Округляет число до указанной точности.
pi_approx = 3.14159
print(f"Округление {pi_approx} до 2 знаков после запятой: {round(pi_approx, 2)}")
## pow(): Возвращает основание в степени показателя.
print(f"2 в степени 3: {pow(2, 3)}")
Сохраните файл и выполните его в терминале.
python3 step2_math.py
Вывод должен отобразить результаты каждой математической операции.
Absolute value of -10: 10
Sum of numbers [5, -10, 15, -2, 8]: 16
Minimum of numbers: -10
Maximum of numbers: 15
Rounding 3.14159 to 2 decimal places: 3.14
2 to the power of 3: 8
Работа с последовательностями и итерируемыми объектами
На этом шаге вы узнаете, как обрабатывать и преобразовывать последовательности, такие как списки и кортежи. Мы рассмотрим функции len(), sorted(), reversed(), enumerate(), map(), filter() и zip(). Многие из этих функций возвращают итераторы — эффективные объекты, экономящие память.
Откройте файл step3_sequences.py.
Добавьте следующий код в step3_sequences.py. Этот скрипт продемонстрирует, как получить длину списка, отсортировать его, обратить порядок элементов и выполнить более сложные преобразования с использованием map, filter и zip.
## step3_sequences.py
my_list = [3, 1, 4, 1, 5, 9]
print(f"Исходный список: {my_list}")
## len(): Возвращает длину (количество элементов) объекта.
print(f"Длина списка: {len(my_list)}")
## sorted(): Возвращает новый отсортированный список из элементов итерируемого объекта.
print(f"Отсортированный список: {sorted(my_list)}")
## reversed(): Возвращает обратный итератор. Мы преобразуем его в список для вывода.
print(f"Список в обратном порядке: {list(reversed(my_list))}")
## enumerate(): Возвращает объект enumerate (итератор пар индекс, значение).
print(f"Перечисленный список: {list(enumerate(my_list))}")
## map(): Возвращает итератор, применяющий функцию к каждому элементу итерируемого объекта.
squared_numbers = map(lambda x: x*x, my_list)
print(f"Квадраты чисел (map): {list(squared_numbers)}")
## filter(): Создает итератор из элементов итерируемого объекта, для которых функция возвращает True.
even_numbers = filter(lambda x: x % 2 == 0, my_list)
print(f"Четные числа (filter): {list(even_numbers)}")
## zip(): Итерирует по нескольким итерируемым объектам параллельно.
list_a = ['a', 'b', 'c']
list_b = [1, 2, 3]
zipped = zip(list_a, list_b)
print(f"Объединенные списки (zip): {list(zipped)}")
Сохраните файл и запустите его.
python3 step3_sequences.py
Вы увидите вывод различных операций с последовательностями. Обратите внимание, как функции, такие как reversed, map, filter и zip, возвращают итераторы, которые мы преобразуем в списки с помощью list(), чтобы отобразить их содержимое.
Original list: [3, 1, 4, 1, 5, 9]
Length of the list: 6
Sorted list: [1, 1, 3, 4, 5, 9]
Reversed list: [9, 5, 1, 4, 1, 3]
Enumerated list: [(0, 3), (1, 1), (2, 4), (3, 1), (4, 5), (5, 9)]
Squared numbers (map): [9, 1, 16, 1, 25, 81]
Even numbers (filter): [4]
Zipped lists: [('a', 1), ('b', 2), ('c', 3)]
Ввод-вывод и представление объектов
На этом шаге вы будете работать с базовыми операциями ввода/вывода и управлять тем, как объекты представляются в виде строк. Мы сосредоточимся на функциях print(), open(), repr() и format(). Мы также кратко упомянем input().
Откройте файл step4_io.py.
Функция input() считывает строку из консоли, преобразует ее в строку и возвращает. Например: name = input("Enter your name: "). Мы не будем использовать ее в нашем скрипте, чтобы избежать приостановки выполнения, но это важная функция, которую необходимо знать.
Теперь добавьте следующий код в step4_io.py. Этот скрипт будет записывать данные в файл, считывать их из него, а также демонстрировать различные способы представления и форматирования объектов в виде строк.
## step4_io.py
import datetime
## open(): Открывает файл и возвращает соответствующий файловый объект.
## Мы используем оператор 'with', чтобы гарантировать автоматическое закрытие файла.
file_path = "/home/labex/project/my_file.txt"
with open(file_path, "w") as f:
f.write("Hello, LabEx!\n")
f.write("This is a test file.")
print(f"Успешно записано в {file_path}")
## Чтение из файла
with open(file_path, "r") as f:
content = f.read()
print("--- Содержимое файла ---")
print(content)
print("--------------------")
## repr(): Возвращает строку, содержащую печатное, однозначное представление объекта.
now = datetime.datetime(2023, 10, 27, 10, 30, 0)
print(f"str(now): {str(now)}")
print(f"repr(now): {repr(now)}")
## format(): Преобразует значение в "форматированное" представление.
formatted_string = format(123.4567, ".2f")
print(f"Отформатированное число (123.4567 до .2f): {formatted_string}")
Сохраните файл и запустите его из терминала.
python3 step4_io.py
Скрипт создаст файл my_file.txt, запишет в него данные, прочитает их обратно и выведет содержимое. Он также покажет разницу между str() и repr() для объекта datetime и продемонстрирует форматирование чисел.
Successfully wrote to /home/labex/project/my_file.txt
--- File Content ---
Hello, LabEx!
This is a test file.
--------------------
str(now): 2023-10-27 10:30:00
repr(now): datetime.datetime(2023, 10, 27, 10, 30)
Formatted number (123.4567 to .2f): 123.46
Интроспекция объектов и метапрограммирование
На этом заключительном шаге вы изучите расширенные функции для взаимодействия с атрибутами объектов и пространствами имен (namespaces). Это часто называют интроспекцией или рефлексией. Мы будем использовать функции getattr(), hasattr(), setattr(), dir(), globals() и locals().
Откройте файл step5_introspection.py.
Мы определим простой класс, а затем используем функции интроспекции для динамического исследования и изменения его экземпляров. Добавьте следующий код в step5_introspection.py.
## step5_introspection.py
class Person:
species = "Homo sapiens"
def __init__(self, name, age):
self.name = name
self.age = age
p = Person("Alice", 30)
## hasattr(): Возвращает True, если объект имеет именованный атрибут.
print(f"Есть ли у человека атрибут 'name'? {hasattr(p, 'name')}")
print(f"Есть ли у человека атрибут 'height'? {hasattr(p, 'height')}")
## setattr(): Это аналог getattr(). Он устанавливает атрибут объекта.
print("Установка атрибута 'height' в 175...")
setattr(p, 'height', 175)
print(f"Есть ли у человека атрибут 'height' теперь? {hasattr(p, 'height')}")
## getattr(): Возвращает значение именованного атрибута объекта.
print(f"Имя человека: {getattr(p, 'name')}")
print(f"Рост человека: {getattr(p, 'height')}")
## dir(): Возвращает список имен в текущей локальной области видимости или атрибутов объекта.
## Мы проверим, есть ли теперь 'height' в списке атрибутов.
print(f"Является ли 'height' в dir(p)? {'height' in dir(p)}")
## globals(): Возвращает словарь текущей глобальной таблицы символов.
## Мы проверим, находится ли наш класс 'Person' в globals.
print(f"Является ли 'Person' в globals? {'Person' in globals().keys()}")
## locals(): Возвращает словарь текущей локальной таблицы символов.
def a_func():
x = 10
print(f"Является ли 'x' в locals()? {'x' in locals().keys()}")
a_func()
Сохраните файл и запустите его.
python3 step5_introspection.py
Вывод демонстрирует, как вы можете динамически проверять, устанавливать и получать атрибуты объекта, используя их строковые имена. Он также показывает, как исследовать атрибуты объекта и переменные, доступные в глобальной и локальной областях видимости.
Does person have 'name' attribute? True
Does person have 'height' attribute? False
Setting attribute 'height' to 175...
Does person have 'height' attribute now? True
Person's name: Alice
Person's height: 175
Is 'height' in dir(p)? True
Is 'Person' in globals? True
Is 'x' in locals()? True
Резюме
Поздравляем с завершением лабораторной работы! Вы получили практический опыт работы с широким спектром основных встроенных функций Python.
В этой лабораторной работе вы научились:
- Преобразовывать типы данных и исследовать объекты (
int,str,type,isinstance). - Выполнять общие математические операции (
abs,sum,min,max,round). - Манипулировать и обрабатывать последовательности и итерируемые объекты (
len,sorted,map,filter,zip). - Выполнять базовый ввод/вывод файлов и представлять объекты в виде строк (
open,repr,format). - Исследовать и динамически изменять объекты и пространства имен (
hasattr,getattr,setattr,dir).
Эти функции являются основой повседневного программирования на Python. Овладение ими значительно повысит эффективность и читаемость вашего кода. Продолжайте изучать другие встроенные функции и практикуйтесь в их использовании в собственных проектах.



