Бібліотеки
Останнє оновлення 2025-04-24 | Редагувати цю сторінку
Огляд
Питання
- Як використовувати програмне забезпечення, написане іншими людьми?
- Як дізнатися, які саме функції виконує це програмне забезпечення?
Цілі
- Переваги створення та використання бібліотек програмного забезпечення.
- Імпорт та використання стандартних бібліотек Python у власних програмах.
- Пошук документації про стандартні бібліотеки в інтерактивному режимі (в інтерпретаторі) або онлайн.
Більша частина потужності мови програмування полягає в її бібліотеках.
-
Бібліотека - це колекція файлів (так званих
модулів), що містить функції для використання іншими
програмами.
- Може також визначати значення даних (наприклад, числові константи) та інші речі.
- Передбачається, що зміст бібліотеки певним чином взаємопов’язаний, але немає засобів це проконтролювати.
- Стандартна бібліотека Python — це великий набір модулів, що входить до складу базової інсталяції Python.
- Багато додаткових бібліотек доступні в PyPI (Python Package Index - репозиторій програм для Python).
- Пізніше ми побачимо, як писати нові бібліотеки.
Бібліотеки та модулі
Бібліотека — це набір модулів, але ці терміни часто вважаються взаємозамінними, особливо тому, що багато бібліотек складаються лише з одного модуля, тому не хвилюйтеся, якщо ви їх плутаєте.
Щоб використати бібліотечний модуль, його спочатку потрібно імпортувати.
- Для завантаження бібліотечного модуля в пам’ять програми
використовуйте
import
. - Потім посилайтеся на функції модуля за допомогою
module_name.function_name
.- У Python синтаксис
a.b
означає щоa
міститьb
, або іншими словами,b
є частиноюa
, абоb
належить доa
.
- У Python синтаксис
- Використовуючи
math
, один із модулів стандартної бібліотеки, маємо:
ВИХІД
pi is 3.141592653589793
cos(pi) is -1.0
- На кожен елемент модуля потрібно посилатися разом з його назвою.
-
math.cos(pi)
не спрацює: посилання наpi
жодним чином не “успадковує” посилання наmath
при виклику функціїcos()
.
-
Використовуйте help
, щоб дізнатися про вміст
бібліотечного модуля.
- Працює так само, як довідка для функції.
ВИХІД
Help on module math:
NAME
math
MODULE REFERENCE
http://docs.python.org/3/library/math
The following documentation is automatically generated from the Python
source files. It may be incomplete, incorrect or include features that
are considered implementation detail and may vary between Python
implementations. When in doubt, consult the module reference at the
location listed above.
DESCRIPTION
This module is always available. It provides access to the
mathematical functions defined by the C standard.
FUNCTIONS
acos(x, /)
Return the arc cosine (measured in radians) of x.
⋮ ⋮ ⋮
Щоб скоротити програми, імпортуйте лише певні елементи з бібліотечного модуля.
- Використовуйте
from ... import ...
, щоб завантажити лише певні елементи з бібліотечного модуля. - Потім звертайтеся до них безпосередньо без назви бібліотеки як префікса.
ВИХІД
cos(pi) is -1.0
Створіть псевдонім для бібліотечного модуля під час його імпорту для скорочення програм.
- Використовуйте
import ... ... as ...
, щоб надати бібліотеці короткий псевдонім під час її імпорту. - Потім звертайтеся до елементів у бібліотеці, використовуючи цю скорочену назву.
ВИХІД
cos(pi) is -1.0
- Зазвичай цей метод використовується для бібліотек, які дуже поширені
або мають довгі імена.
- Наприклад, бібліотека для побудови графіків
matplotlib
часто має псевдонімmpl
.
- Наприклад, бібліотека для побудови графіків
- Але цей спосіб ускладнює програми, оскільки читачі мають вивчити псевдоніми вашої програми.
Знайомство з модулем math
- За допомогою якої функції з модуля
math
можна обчислити квадратний корінь без використанняsqrt
? - Оскільки бібліотека містить цю функцію, чому існує
sqrt
?
Використовуючи
help(math)
ми бачимо, що у нас єpow(x,y)
на додаток доsqrt(x)
, отже ми можемо застосуватиpow(x, 0.5)
для визначення квадратного кореня.Функція
sqrt(x)
, ймовірно, легша для читання в вихідному коді, ніжpow(x, 0.5)
. Читабельність є основою хорошого стилю програмування, отже має сенс надати спеціальну функцію для цього конкретного поширеного випадку.
Крім того, дизайн бібліотеки math
у Python бере свій
початок у стандарті мови C, яка включає як sqrt(x)
, так і
pow(x,y)
, тож трохи історії програмування відображається в
назвах функцій Python.
Пошук правильного модуля
Припустимо, ви хочете вибрати випадковий символ з рядка:
- Який модуль зі стандартної бібліотеки може допомогти?
- Яку функцію ви б вибрали з цього модуля? Чи є альтернативи?
- Спробуйте написати програму, яка використовує цю функцію.
Здається, модуль random може допомогти.
Рядок містить 11 символів, кожен з яких має позиційний індекс від 0
до 10. Ви можете використовувати функції random.randrange
або random.randint
,
щоб отримати випадкове число від 0 до 10, а потім вибрати символ з
bases
в цій позиції:
або більш компактно:
Можливо, ви знайшли ще функцію random.sample
?
Ця функція дозволяє використовувати трохи менше коду, але може бути
трохи складнішою для розуміння при читанні:
Зверніть увагу, що ця функція повертає список (list) значень. Ми дізнаємося про списки у епізоді 11.
Найпростіше і найкоротше рішення - це функція random.choice
,
яка виконує саме те, чого ми хочемо:
Головоломка (задача Парсона). Приклад програмування
Упорядкуйте наступні оператори таким чином, щоб друкувалась випадкова основа ДНК та її індекс в рядку. Не всі оператори можуть бути потрібні. За необхідності додавайте проміжні змінні.
Коли доступна допомога?
Ваш колега виконав запит help(math)
. Python повернув
помилку:
ПОМИЛКА
NameError: name 'math' is not defined
Що забув зробити ваш колега?
Імпортувати модуль math (import math
)
можна записати як
Оскільки ви щойно написали код і знайомі з ним, вам справді легше читати першу версію. Але при спробі прочитати величезну купу коду, написаного кимось іншим, або коли повертаєтесь до свого власного величезного фрагмента коду через кілька місяців, нескорочені імена часто легші, за винятком випадку, де є чіткі умовні позначення скорочень.
Існує багато способів імпорту бібліотек!
Зіставте наступні команди друку з відповідними викликами бібліотеки.
Команди друку:
print("sin(pi/2) =", sin(pi/2))
print("sin(pi/2) =", m.sin(m.pi/2))
print("sin(pi/2) =", math.sin(math.pi/2))
Виклик бібліотеки:
from math import sin, pi
import math
import math as m
from math import *
- Виклики бібліотеки 1 та 4. Для прямого посилання на
sin
таpi
без назви бібліотеки як префікса, вам потрібно використовувати операторfrom ... import ...
. Виклик бібліотеки 1 явним чином імпортує дві функціїsin
таpi
, тоді як виклик бібліотеки 4 імпортує всі функції з модуляmath
. - Виклик бібліотеки 3. Тут
sin
таpi
посилаються на скорочену назву бібліотекиm
замістьmath
. Це стає можливим завдяки командіimport ... as ...
яка створює псевдонім дляmath
в формі короткого іменіm
. - Виклик бібліотеки 2. Тут
sin
таpi
посилаються на бібліотекуmath
за її стандартним імʼям, тому буде достатньо звичайного викликуimport ...
.
Примітка: хоча виклик бібліотеки 4 працює, імпорт
всіх імен модуля за допомогою шаблона *
не рекомендується, тому що в такому
разі невідомо, які імена з модуля використовуються в коді. Загалом,
краще робити імпорт якомога точнішим та імпортувати лише те, що
використовує ваш код. У виклику бібліотеки 1 оператор
import
явно повідомляє нам що функція sin
імпортується з модуля math
, але виклик бібліотеки 4 не
передає цю інформацію.
Скоріше за все, цю версію легше читати, оскільки вона менш насичена.
Основною причиною не використовувати цю форму імпорту є уникнення збігу
імен. Наприклад, ви б не імпортували degrees
таким чином,
якби також хотіли використовувати назву degrees
для власної
змінної або функції. Або якщо вам необхідно також імпортувати функцію з
назвою degrees
з іншої бібліотеки.
ВИХІД
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-1-d72e1d780bab> in <module>
1 from math import log
----> 2 log(0)
ValueError: math domain error
Логарифм
x
визначено лише дляx > 0
, тому 0 знаходиться за межами області визначення функції.Ви отримуєте повідомлення про помилку типу
ValueError
, яке вказує на те, що функція отримала неприпустиме значення аргументу. Додаткове повідомлення “math domain error” пояснює, в чому полягає проблема.
Ключові моменти
- Більша частина потужності мови програмування полягає в її бібліотеках.
- Щоб використати бібліотечний модуль, його спочатку потрібно імпортувати.
- Використовуйте
help
, щоб дізнатися про вміст бібліотечного модуля. - Імпортуйте певні елементи з бібліотечного модуля, щоб скоротити програми.
- Створюйте псевдонім для бібліотечного модуля під час його імпорту для скорочення програм.