6 способов найти модуль числа в Python 3
Модуль числа. Это, казалось бы, простая вещь. да, так оно и есть. Тем не менее — всегда интересно поэкспериментировать и по-новому взглянуть на простое.
Сегодня я покажу вам 6 способов найти модуль числа в Python 3. Я не стал добавлять сюда совсем абсурдные вещи, но немного абсурдности здесь все же будет.
Для начала самое очевидное. Проверяем отрицательное число (назовем его x) или положительное, т.е.
def abs1(x): if x < 0: return x*(-1) return x
А можно заменить умножение унарным минусом:
def abs1(x): if x < 0: return -x return x
Самое короткое решение в нашей статье — найти максимум между x и -x. Таким образом результат всегда будет положительным:
def abs2(x): return max(-x, x)
Здесь мы проверяем строку на наличие в ней минуса. Изначально я хотел использовать метод isdigit(), но потом я понял, что метод не считает точку частью числа, поэтому для float в строке метод возвращает False. Поэтому:
def abs3(x): if ‘-‘ in str(x): return -x return x
Этот способ использует условную инструкцию из предыдущей функции, но использует срез, чтобы избавиться от минуса. 3 строка выглядит не очень, приходится дважды менять тип данных результата. По-моему — это ухудшенная версия 3 способа:
def abs4(x): if ‘-‘ in str(x): return float(str(x)[1::]) return x
Тут мы будем использовать факт того, что операция квадратного корня в Python всегда возвращает положительный результат. Эту операцию не обязательно брать из библиотеки Math, можно просто возвести число в с степень 0.5. Итак:
def abs5(x): return (x*x)**0.5
Здесь мы используем операции со строками, как в 4 способе. Отличие в том, что мы не проверяем строку на наличие минуса. Мы убираем уго, есть он в строке или нет. Метод replace() позволяет убрать все повторения одного символа, что для нас избыточно, но с нулем повторений он тоже работает:
def abs6(x): return float(str(x).replace(‘-‘, »))
Примечание: говоря про положительные значения, правильнее сказать — положительные или нулевые, но я решил не засорять текст такой мелочью.
Статистика быстродействия
Подведем итоги, узнаем — что же быстрее работает. О том, как замерить время работы программы, я, возможно, расскажу в одной из следующих статей. Ну а пока что приведу статистические данные.
Я измерил время работы данного куска кода, где i — одна из 6 функций.
for j in range(100000): a = (i(1), i(-1), i(1.0), i(-1.0))
И вот что получилось:
Что у нас по итогу? Худший результат показал 4 способ, неудивительно.Самый очевидный способ — первый, на 2 месте. С большим отрывом лидирует 5 вариант, 100000 повторений за 0.79 сек! Математика быстрее логического оператора if и операций со строками.
Заключение
Я надеюсь, что вам была интересна данная статья, и вы разобрались в теме. Если хотите меня дополнить — пишите в комментариях. Удачи в мире IT!
Python модули и пакеты
При написании объёмного кода, часто прибегают к разбиению такового на логически независимые блоки и к последующему выносу в другие файлы. Это повышает читаемость как самого кода, так и проекта целиком. Что влечет за собой менее ресурсозатратную поддержку(дальнейшую модификацию кодовой базы для разных нужд).
После разделения кода по файлам, следует выстроить их взаимодействие. В языке программирования Python данный механизм реализуется с использованием import. Импортировать можно любые компоненты(если Вы кодом не ограничивали таковые) модулей или пакетов.
Модули также могут быть написаны и на других языках, но данная статья направлена на рассмотрение использования данного механизмах в рамках Python.
Модули
В языке программирования Python модулями являются все файлы с расширением *.py (* обозначает, что на этом месте может стоять любой символ или любое их количество). Исключением является служебный файл __init__.py (о назначении которого описано далее в статье).
Дальше стоит понимать, что любая программа имеет некую точку входа. Это своего рода место с которого стартует наш скрипт. В языках предшественниках данной точкой служила функция main и могла быть лишь только одной. В нашем случае допускается отсутствие таковой, но это снижает качество кода, делая его сложным и малопредсказуемым(при импорте код содержащийся на верхнем уровне исполняется). Для того чтобы указать точку входа(может быть указана только в модулях) используется специальная переменная __name__ , в которой содержится наименование текущего модуля или пакета. Если текущий модуль находится на верхнем уровне исполнения(мы явно его передали на исполнение Python), то он называется __main__ независимо от названия файла.
# Указание входной точки ## Если __name__ равно "__main__" исполни if __name__ == "__main__": print('Я главный!') # Вызов других функций, например main()
Для примера реализуем простой модуль, который будет возвращать нам информацию:
# http_get.modules.http_get # Расположен в дирректории http_get, modules и назван http_get def get_dict(): return # Поскольку зависимых импортов нет, мы можем исполнить этот код для проверки # Т.е. в качестве входной точки использовать нашу функцию # Данный код исполнится только, когда этот файл будет исполняемым(не импортируемым) if __name__ == '__main__': print(get_dict())
Далее в корне создадим main.py файл, в который импортируем наш модуль двумя разными способами(об импортах описано в статье):
# main.py from ModulesAndPackages.module_examples.http_get.modules.http_get import get_dict as absolute from http_get.modules.http_get import get_dict as relative def main(): # Работает print(absolute()) print(relative()) if __name__ == '__main__': main()
Все без проблем исполняется.
Трудности
При переносе файлов куда-либо из директории возникнут проблемы из-за первого импорта( main.py ). Поскольку часто приходится писать один и тот же код, использование уже хорошо написанного пакета или модуля может экономить много времени, но исправление большого количества импортов требует Ваших ресурсов. Хорошо написанный пакет, модуль или импорт может экономить ваши рабочие часы, а иногда и нервы.
Не изменяя наши модули(импорты), при изменении положения файлов возникает ошибка импорта:
# Не работает в другом проекте from ModulesAndPackages.module_examples.http_get.modules.http_get import get_dict as absolute # Всегда работает from http_get.modules.http_get import get_dict as relative def main(): print(absolute()) print(relative()) if __name__ == '__main__': main()
Пакеты
В языке программирования Python пакетами являются все директории(вне зависимости от наличия в них модулей), содержащие файл __init__.py , который исполняется при импорте пакета и несет его название ( __name__ ).
Для примера реализуем простой пакет( package ), на базе вышеописанного модуля( http_get.py ):
# package/modules/http_get.py def get_dict(): return if __name__ == '__main__': print(get_dict())
# package/__init__.py from .modules.http_get import get_dict . def get_data(): return get_dict() . # Не работает # __init__ не может иметь точки входа # # if __name__ == '__main__': # get_data()
А также реализуем простой пакет с такой же логикой, но с использованием абсолютного импорта:
# package_2/modules/http_get.py def get_dict(): return if __name__ == '__main__': print(get_dict())
# package_2/__init__.py from ModulesAndPackages.package_examples.package_2.modules.http_get import get_dict . def get_data(): return get_dict() . # Не работает # __init__ не может иметь точки входа # # if __name__ == '__main__': # get_data()
В корне директории(на уровень выше пакета) создадим файл, в котором воспользуемся нашими пакетами( main.py ):
# main.py from package import get_data from package_2 import get_data as get_data_2 def main(): # Работает print(get_data()) print(get_data_2()) if __name__ == '__main__': main()
Все работает без ошибок.
Трудности
Но при переносе нашего package_2 в другой проект, он теряет свою работоспособность из-за ошибки импортирования в __init__.py файле, в отличии от package .
# package_transferring/package/modules/http_get.py def get_dict(): return if __name__ == '__main__': print(get_dict())
# package_transferring/package/__init__.py from .modules.http_get import get_dict . def get_data(): return get_dict() . # Не работает # __init__ не может иметь точки входа # # if __name__ == '__main__': # get_data()
# package_transferring/package_2/modules/http_get.py def get_dict(): return if __name__ == '__main__': print(get_dict())
# package_transferring/package_2/__init__.py # Ошибка импорта т.к. изменилась директория from ModulesAndPackages.package_examples.package_2.modules.http_get import get_dict . def get_data(): return get_dict() . # Does not work! # Because init file in package could not have entry point # # if __name__ == '__main__': # get_data()
# package_transferring/main.py from package import get_data # Ошибка импорта from package_2 import get_data as get_data_2 def main(): print(get_data()) print(get_data_2()) if __name__ == '__main__': main()
P.S.
Данная статья написана для новичков, которые изучают язык программирования Python. Задача которой продемонстрировать на простых примерах способы написания пакетов и модулей(не является туториалом), а так же показать какие трудности могут возникнуть и пути их решения.
Github с проектом к данной статье: ModulesAndPackages
Может быть полезно выгрузить модуль или пакет и попробовать внедрить его в свой проект.
Модуль числа в Python — функции abs() и math.fabs()
Запускаю китайскую реплику «ТАРДИС», и вот мы в пятом классе. На доске нарисована числовая ось, а на ней выделен отрезок. Его начало в точке 4, а конец — в 8. Учительница говорит, что длину отрезка можно найти путём вычитания координаты начала отрезка из координаты его конца. Вычитаем, получаем 4, и радуемся — мы нашли длину. Ура!
Перемещаемся на год вперёд, и там происходит странное: учительница выделяет мелом другой отрезок, но делает это в каком-то неправильном месте — левее точки с цифрой «0». Теперь перед нами старая задача, но с новыми числами и даже буквами: A, B, минус 4 и минус 8. Мы начинаем искать длину отрезка AB = [-4;-8]:
Переводим непонимающий взгляд с получившейся отрицательной длины на довольную улыбающуюся учительницу, а затем на доску. Там наверху, рядом с сегодняшней датой, написана тема урока: «Модуль числа».
Что такое модуль числа
Модуль числа называют абсолютной величиной.
Для вещественных чисел модуль определяется так:
Т.е. в любом случае, модуль — число большее или равное 0. Поэтому отрицательная длина в примере хитрой учительницы должна была быть взята по модулю:
Тогда дети бы увидели, что геометрический смысл модуля — есть расстояние. Это справедливо и для комплексных чисел, однако формальное определение для них отличается от вещественного:
, где z — комплексное число: z = x + i y.
В Python для нахождения модуля числа применяются две функции: fabs() из подключаемой библиотеки math и встроенная функция abs() .
Abs
В то время как math.fabs() может оперировать только вещественными аргументами, abs() отлично справляется и с комплексными. Для начала покажем, что abs в python работает строго в соответствии с математическим определением.
# для вещественных чисел print(abs(-1)) print(abs(0)) print(abs(1)) > 1 > 0 > 1
Как видно, с вещественными числами всё в порядке. Перейдём к комплексным.
# для комплексных чисел print(complex(-3, 4)) print(abs(complex(-3, 4))) > (-3+4j) > 5.0
Если вспомнить, что комплексное число выглядит так: z = x + i y, а его модуль вычисляется по формуле:
, то можно без труда посчитать, что sqrt(3**2 + 4**2) действительно равно 5.0 .
Можно заметить, что abs() возвращает значения разных типов. Это зависит от типа аргумента:
print(type(abs(1))) > print(type(abs(1.0))) > print(type(abs(complex(1.0, 1.0))))
В этом кроется ещё одно отличие abs() от fabs() . Функция из модуля math всегда приводит аргумент к вещественному типу, а если это невозможно сделать — выбрасывает ошибку:
print(type(math.fabs(complex(2,3)))) > TypeError: can’t convert complex to float
Fabs
Для начала работы с fabs() необходимо импортировать модуль math с помощью следующей инструкции:
Мы уже выяснили, что fabs() не работает с комплексными числами, поэтому проверим работу функции на вещественных:
print(math.fabs(-10)) print(math.fabs(0)) print(math.fabs(10)) > 10.0 > 0.0 > 10.0
Функция производит вычисления в соответствие с математическим определением, однако, в отличие от abs() , всегда возвращает результат типа float :
Основные свойства модулей
# Квадрат модуля = квадрату числа print(pow(4, 2) == pow(abs(4), 2)) > True # |x| = |-x| print(abs(-10) == abs(10)) > True # Модуль произведения = произведению модулей: |ab|=|a||b| print(math.fabs(11 * 3) == math.fabs(11) * math.fabs(3)) > True # Аналогично для деления: |a/b|=|a|/|b| print(math.fabs(48/8) == math.fabs(48) / math.fabs(8)) > True # |a ** b| = |a| ** b print(abs(2 ** 10) == abs(2) ** 10) > True
И еще несколько важных неравенств:
Что такое модули и библиотеки в Python
Узнайте о модулях и библиотеках в Python, их использовании и важности для упрощения разработки и повторного использования кода.

Алексей Кодов
Автор статьи
7 июня 2023 в 14:31
Модули и библиотеки являются ключевыми элементами в мире Python, поскольку они значительно упрощают разработку и обеспечивают повторное использование кода. В этой статье мы разберемся, что такое модули и библиотеки, и как их использовать.
Модули в Python
Модуль — это файл, содержащий определения функций, классов и переменных, а также исполняемый код. Модули в Python обычно имеют расширение .py . Они позволяют структурировать код и делить его на мелкие, легко управляемые части.
Чтобы использовать модуль, его нужно импортировать с помощью инструкции import . Например, импортируем модуль math , который предоставляет математические функции:
import math result = math.sqrt(16) print(result) # Выведет 4.0
Библиотеки в Python
Библиотека — это набор связанных модулей, объединенных вместе для решения определенной задачи или предоставления определенного функционала. Библиотеки можно представить как расширение базового функционала Python, которое помогает разработчикам решать различные задачи без необходимости писать все с нуля.
Python имеет множество встроенных библиотек, таких как os , sys , math и других. Кроме того, существует огромное количество сторонних библиотек, доступных для установки и использования. Чтобы установить стороннюю библиотеку, можно использовать инструмент pip :
pip install имя_библиотеки
Для импорта библиотеки используется та же инструкция import , что и для модулей. Например, импортируем библиотеку requests для выполнения HTTP-запросов:
import requests response = requests.get('https://api.example.com/data') print(response.json())
Python-разработчик: новая работа через 9 месяцев
Получится, даже если у вас нет опыта в IT

Заключение
Теперь вы знаете, что такое модули и библиотеки в Python, и как их использовать. Они являются мощным инструментом для повторного использования кода и упрощения разработки. Не стесняйтесь изучать и использовать различные модули и библиотеки, чтобы сделать ваш код более эффективным и легко читаемым.
Удачи в изучении Python! Если у вас возникнут вопросы или вам понадобится дополнительная помощь, обратитесь к нашей знакомой онлайн-школе, которая хорошо учит по теме «Python-разработка».