JavaRush /Курси /Модуль 1: Python Core /Вбудовані функції

Вбудовані функції

Модуль 1: Python Core
Рівень 8 , Лекція 0
Відкрита

1.1 Список популярних вбудованих функцій

Ми з вами вже знайомі з багатьма вбудованими функціями, але хотілося б розказати про ще декілька, які будуть вам корисні найближчим часом:

  • id()
  • hash()
  • dir()

Нижче трохи про них детальніше:

Функція id()

Функція id() повертає унікальний ідентифікатор об'єкта (число). Цей ідентифікатор є цілим числом і залишається унікальним для об'єкта протягом його існування. Зазвичай ідентифікатор відповідає адресі об'єкта в пам'яті, хоча це не гарантується в специфікації Python.

Унікальний ідентифікатор об'єкта можна використовувати для кращого розуміння багатьох операцій, наприклад, щоб краще зрозуміти, де об'єкти дублюються, а де у нас посилання на один і той же об'єкт. Однакові об'єкти матимуть різні ідентифікатори, але посилання на той самий об'єкт покажуть один і той же ідентифікатор.

Можна застосовувати під час відладки програми та розуміння того, як Python керує об'єктами в пам'яті.


a = [1, 2, 3]
b = a
print(id(a))  # Виводить ідентифікатор об'єкта 'a'
print(id(b))  # Виводить той самий ідентифікатор, оскільки 'b' посилається на той самий об'єкт

Функція hash()

Функція hash() повертає хеш-значення (число) для зазначеного об'єкта, якщо він хешуємих. Хешуємі об'єкти у Python повинні бути незмінними та мати постійне значення хешу протягом їх життєвого циклу.

Приклади таких об'єктів включають числа, рядки та кортежі (якщо всі їх елементи також хешуємі). Хеш-значення використовуються у словниках та множинах для швидкого пошуку. Використовується для оптимізації пошуку і зберігання даних, де необхідні швидкі перевірки рівності та унікальності.


print(hash("hello"))  # Повертає хеш-значення рядка "hello"
print(hash(42))       # Повертає хеш-значення числа 42
print(hash((1, 2, 3)))  # Повертає хеш-значення кортежа (1, 2, 3)

Важливо! Хеш-значення незмінних об'єктів залишаються постійними протягом їх життєвого циклу. Проте змінні об'єкти, такі як списки та словники, не є хешуємі та не можуть використовуватися як ключі у словниках або елементи множин.

Функція dir()

Функція dir() повертає список атрибутів і методів об'єкта. Якщо об'єкт не вказано, dir() повертає список імен у поточній локальній області видимості. Ця функція корисна для вивчення структури об'єктів і їх атрибутів.

Використовується для отримання списку всіх атрибутів і методів об'єкта, що допомагає краще зрозуміти його структуру та доступні функції. Часто використовується для відладки та вивчення об'єктів, особливо коли документація обмежена або недоступна.


class MyClass:
    def __init__(self):
        self.name = "Alice"
            
    def greet(self):
        print("Hello, " + self.name)
        
obj = MyClass()
print(dir(obj))  # Виводить список атрибутів та методів об'єкта 'obj'
print(dir())     # Виводить список імен у поточній локальній області видимості

1.2 Робота з колекціями

Є ще декілька корисних функцій для роботи з колекціями. Можливо, вони згадувались у попередніх лекціях, але зараз я хочу торкнутися їх трохи детальніше.

  • zip()
  • min()
  • max()
  • sum()
  • count()

Функція zip()

Функція zip() об'єднує декілька ітерованих об'єктів (наприклад, списки, кортежі, рядки) та повертає ітератор кортежів. Кожен кортеж містить елементи, зібрані з позицій з однаковим індексом з усіх ітерованих об'єктів.

Часто використовується для об'єднання даних з декількох ітерованих об'єктів, дозволяючи легко ітерувати по ним одночасно. А також для створення словників з двох списків — один для ключів, інший для значень.


names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
combined = zip(names, ages)
print(list(combined))  # Вивід: [('Alice', 25), ('Bob', 30), ('Charlie', 35)]

Функція max()

Функція max() повертає найбільший елемент з переданого ітерованого об'єкту або з декількох переданих аргументів. Можна також вказати ключову функцію для визначення правила порівняння.


numbers = [1, 2, 3, 4, 5]
print(max(numbers))  # Вивід: 5
            
# З ключовою функцією
words = ["apple", "banana", "cherry"]
print(max(words, key=len))  # Вивід: 'banana'

Функція min()

Функція min() повертає найменший елемент з переданого ітерованого об'єкту або з декількох переданих аргументів. Можна також вказати ключову функцію для визначення правила порівняння.


numbers = [1, 2, 3, 4, 5]
print(min(numbers))  # Вивід: 1
        
# З ключовою функцією
words = ["apple", "banana", "cherry"]
print(min(words, key=len))  # Вивід: 'apple'

Функція count()

Функція count() використовується для підрахунку кількості входжень елемента в ітерованому об'єкті, такому як список або рядок. Викликається у списку, колекції або ітератора.


numbers = [1, 2, 2, 3, 4, 2, 5]
print(numbers.count(2))  # Вивід: 3
    
text = "hello world"
print(text.count("o"))  # Вивід: 2

Функція sum()

Функція sum() повертає суму всіх елементів ітерованого об'єкту. Опціонально можна вказати початкове значення, яке буде додане до суми.


numbers = [1, 2, 3, 4, 5]
print(sum(numbers))  # Вивід: 15
    
# З початковим значенням
print(sum(numbers, 10))  # Вивід: 25
    

1.3 Виконання коду

І ще дві функції, які можуть бути корисні вам як новачку:

  • eval()
  • exec()

Вони мають потужні можливості, але вимагають обережного використання через потенційні ризики безпеки. Ось детальна інформація про кожну з цих функцій:

Функція eval(expression)

Функція eval() приймає рядок і виконує його як вираз Python. Вона повертає результат виконання цього виразу. Використовується для обчислення рядкових виразів як коду Python.

Приклади:


x = 10
result = eval("x + 5")
print(result)  # Вивід: 15

Функція exec()

Функція exec() приймає рядок і виконує його як код Python. На відміну від eval(), яка виконує лише вирази, exec() може виконувати будь-які інструкції Python, включаючи визначення функцій, цикли та імпорт модулів. Ця функція не повертає значення.

Використовується для виконання динамічних скриптів та визначення нових функцій або класів під час виконання програми.


code = """
def greet(name):
    print(f"Hello, {name}!")
        
greet("Alice")
"""
exec(code)
# Вивід: Hello, Alice!

Важливо! Як і eval(), exec() може бути небезпечним при використанні з недовіреними вхідними даними. Будьте обережні та уникайте використання exec() для виконання коду на production.

Коментарі (8)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Матвій Рівень 28
16 липня 2025
Якщо ми використовуємо функцію zip() то воно бере елементи меншого словника і додає інші елементи ігнорує a = [4, 5, 7, 9 10] b = [2, 3, 4, 5] print(zip(a, b)) #Вивід [(4, 2), (5, 3), (7, 4), (9, 5)]
Pavlo Kushnir Рівень 2
3 червня 2025
Чому у списку b, а не в списку а? Яка різниця? В завданні просять: "Знайти найменший і найбільший елемент у списку чисел за допомогою min() та max()." Але не сказано, что це має бути один список. Я створив два обєкти зі списками чисел.
Pavlo Kushnir Рівень 2
3 червня 2025
a = [1, 2, 2, 3] b = [4, 5, 6] c = zip(a, b) print(list(c)) print(max(a)) print(min(a)) print(a.count(2)) print(sum(a))
negoda Рівень 31
22 липня 2025
Мне наоборот писало, что в списке А а не Б, поменял min() :

a = [1, 2, 3, 4, 5]
b = [5, 10, 20, 30]
lists = zip(a, b)
print(f'{max(a)}, {min(a)}, {sum(a)}')
Pavlo Kushnir Рівень 2
3 червня 2025
Якому повідомленню вірити? 1 - Об'єкт типу 'set' не є хешованим, тому виклик hash(e) призведе до помилки. Видаліть або замініть цей виклик. 2 - Об'єкт типу 'set' також є хешованим, але для нього не було викликано функцію hash(). Теорію про хеш-значення прочитав. Які обєкти не хешуються теж зрозумів. Але...
negoda Рівень 31
22 липня 2025
Не корректное описание задачи. Как я понял там нужно вообще все типы вывести, тоесть все коллекции + строки и числа и к каждому применить id(), hash(), dir() (там где это возможно). Отвечая на ваш вопрос : set - не хешируемый обьект, так как изменяемый. Хешируемые : Числа Строки Кортежи, если все элементы в них тоже хешируемые Булевы значения frozenset Нехешируемые : Списки Множества Словари Эти обьекты изменяемы, поэтому нехешируемые.
Andriy Trubchanin Рівень 23
16 лютого 2025
Вирішив перевірити як Python зі списку кортежів зробить словник і виконав такий код.

names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
combined = zip(names, ages)
print(list(combined))  # Вивід: [('Alice', 25), ('Bob', 30), ('Charlie', 35)]
print(dict(list(combined))) # Вивід: {}
На моє здивування другий print показав пустий словник. Виявилося, що у змінній combined лежить ітератор, який після першого використання вичерпується і при другому використанні вже не повертає елементи.
negoda Рівень 31
22 липня 2025
zip() - возвращает итератор, если передавать его списку, то после того как он вернет все значения, он исчерпает себя и больше не будет выводить ничего. Единственный выход - вызывать его по новой снова и снова, например, не присваивая значения переменной, а выводя сразу через принт (хотя смысла это в целом имеет не много) :

print(list(zip(names, ages)))