📜 Старый подход: from math import *
Учебные примеры иногда пишут from math import *, чтобы не указывать префикс math. перед каждой функцией. Это работает, но затрудняет понимание, откуда взялось то или иное имя.
from math import *
radius = 5
area = pi * radius ** 2
print(sqrt(area))
Риск: если в программе уже есть переменная pi или функция sqrt, импорт «звёздочкой» их затрёт.
✅ Современный подход: явный импорт
Явный импорт делает код понятнее: читатель сразу видит, что sqrt и pi пришли из модуля math.
import math
radius = 5
area = math.pi * radius ** 2
print(math.sqrt(area))
- Не засоряет глобальное пространство имён.
- Проще искать определения функций.
- Снижается риск случайных конфликтов имён.
📜 Старый подход: round() для денег
Для финансовых расчётов иногда пытаются обойтись встроенным round():
price = 0.1
total = price * 3
print(round(total, 2)) # иногда 0.3, но промежуточные шаги неточны
Проблема: 0.1 как float уже неточен, и накопленная погрешность может дать неожиданный результат при сложных вычислениях.
✅ Современный подход: Decimal
Для цен, налогов и валют используйте Decimal со строковыми аргументами.
from decimal import Decimal
price = Decimal('0.1')
total = price * 3
print(total) # 0.3
print(total == Decimal('0.3')) # True
Decimal лучше подходит для финансовых приложений.
📜 Старый подход: ручное округление
Раньше для округления до ближайшего целого «в школу» использовали трюк int(x + 0.5). Он работает только для положительных чисел и ломается на отрицательных.
x = 2.7
print(int(x + 0.5)) # 3
x = -2.7
print(int(x + 0.5)) # -2, а ожидалось -3
✅ Современный подход: math.floor, math.ceil, round
Выбирайте функцию в зависимости от задачи:
import math
print(math.floor(2.7)) # 2 (округление вниз)
print(math.ceil(2.1)) # 3 (округление вверх)
print(round(2.5)) # 2 (банковское округление)
print(math.isclose(0.1 + 0.2, 0.3)) # True
Decimal с нужным режимом округления.
🕰️ Когда старый подход ещё встречается
from module import * и round() для денег можно встретить в старых учебниках и legacy-коде. Важно понимать, почему они работают, но в новых проектах стоит применять современные альтернативы.