Встроенные функции Python

PythonBeginner
Практиковаться сейчас

Введение

Добро пожаловать в лабораторную работу по встроенным функциям 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. Овладение ими значительно повысит эффективность и читаемость вашего кода. Продолжайте изучать другие встроенные функции и практикуйтесь в их использовании в собственных проектах.