2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Python, модуль operator
Сообщение25.08.2023, 13:35 
Заслуженный участник
Аватара пользователя


01/09/13
4656
Зачем он нужен?

 Профиль  
                  
 
 Re: Python, модуль operator
Сообщение25.08.2023, 18:03 
Экс-модератор
Аватара пользователя


23/12/05
12064
например, чтобы готовые функции передавать в качестве аргументов

 Профиль  
                  
 
 Re: Python, модуль operator
Сообщение25.08.2023, 18:21 
Заслуженный участник
Аватара пользователя


01/09/13
4656
photon
Спасибо!
Но на что уж я люблю поизвращаться, но не припомню случая, когда это мне было реально нужно... :mrgreen:

 Профиль  
                  
 
 Re: Python, модуль operator
Сообщение25.08.2023, 18:44 
Заслуженный участник
Аватара пользователя


16/07/14
9149
Цюрих
В основном используется во всяких сильно абстрактных фреймворках, куда активно пихаются графы вычислений https://github.com/search?q=language%3A ... &type=code.

 Профиль  
                  
 
 Re: Python, модуль operator
Сообщение25.08.2023, 19:45 
Заслуженный участник


20/08/14
11776
Россия, Москва
Geen в сообщении #1606521 писал(а):
Но на что уж я люблю поизвращаться, но не припомню случая, когда это мне было реально нужно... :mrgreen:
Классический пример: функция сортировки списка произвольных объектов, для пар которых определена операция (функция) сравнения. Кроме как передавать последнюю по указателю/ссылке другие реализации громоздки и неудобны.
Другой пример: пишете сложную математическую работу с длинными числами, можно конечно все операции над ними вызывать прямо, а можно через указатели на функции - тогда можно будет в будущем ускорить выполнение подменив указатели на более быстрые функции (умножения, деления, операций по модулю, возведение в степень, да много их что допускают ускорение) без изменения основного кода.

 Профиль  
                  
 
 Re: Python, модуль operator
Сообщение25.08.2023, 20:59 
Заслуженный участник
Аватара пользователя


01/09/13
4656
Dmitriy40 в сообщении #1606544 писал(а):
Классический пример: функция сортировки списка произвольных объектов, для пар которых определена операция (функция) сравнения

Вот тут, как верно подмечает создатель питона, гораздо полезнее функция взятия ключа... оператор сравнения нужен в исключительно редких случаях...
Dmitriy40 в сообщении #1606544 писал(а):
пишете сложную математическую работу с длинными числами

я для них переопределяю обычные операторы и больше не парюсь :mrgreen:

-- 25.08.2023, 21:02 --

mihaild в сообщении #1606526 писал(а):
используется во всяких сильно абстрактных фреймворках

ну допустим, что мне в алгоритме нужна просто "групповая операция"... но я как-то слабо представляю, что осмысленного можно при этом насчитать.

 Профиль  
                  
 
 Re: Python, модуль operator
Сообщение25.08.2023, 21:09 
Заслуженный участник
Аватара пользователя


16/07/14
9149
Цюрих
Geen в сообщении #1606557 писал(а):
но я как-то слабо представляю, что осмысленного можно при этом насчитать
Ну например быстрое итерирование ассоциативной операции - можно написать для произвольной функции двух аргументов, а передавать в неё как раз operator.mul если нужна именно степень.

 Профиль  
                  
 
 Re: Python, модуль operator
Сообщение25.08.2023, 21:17 
Заслуженный участник
Аватара пользователя


01/09/13
4656
mihaild в сообщении #1606560 писал(а):
Ну например быстрое итерирование ассоциативной операции

А часто ли в приложении бывает нужно такое итерирование для разных операций?
Ну а если нечто подобное вшито в глубь фреймворка, то, как мне кажется, я больше времени потрачу на его изучение/поддержание, чем на собственное кодирование...

 Профиль  
                  
 
 Re: Python, модуль operator
Сообщение25.08.2023, 22:06 
Экс-модератор
Аватара пользователя


23/12/05
12064
Geen в сообщении #1606521 писал(а):
photon
Спасибо!
Но на что уж я люблю поизвращаться, но не припомню случая, когда это мне было реально нужно... :mrgreen:

Реальный фрагмент моего кода:
код: [ скачать ] [ спрятать ]
Используется синтаксис Python

    def print_result(self, checked_value: str, is_ok: bool) -> bool:
        """
        Print decorated by defined colors check result
        :param checked_value: name of checked value
        :param is_ok: result of the check to be printed
        :return: result of the check is_ok
        """

        color = self.colors['OK'] if is_ok else self.colors['FAIL']
        result_text = 'PASSED' if is_ok else 'FAILED'
        print(f'Check {checked_value}: {color}{result_text}{self.colors["RESET"]}')
        return is_ok


    def check(self) -> bool:
        """
        Call all the checkers defined in dictionary self.all_checks and print checks results
        :return: True if all checks passed successfully, False otherwise
        """

        for desc, func in self.all_checks.items():
            if not self.print_result(desc, func()):
                return False

        return True

где в словаре all_checks функции, каждая из которых делает свою проверку.

 Профиль  
                  
 
 Re: Python, модуль operator
Сообщение25.08.2023, 22:30 
Заслуженный участник
Аватара пользователя


01/09/13
4656
photon в сообщении #1606575 писал(а):
в словаре all_checks функции, каждая из которых делает свою проверку

Так я не спорю с полезностью/необходимостью иметь ссылки на функции...
Но с количеством аргументов у таких функций их полезность резко падает, имхо :-)

-- 25.08.2023, 22:34 --

(Оффтоп)

На самом деле, я пытался расширить операцию | с двух аргументов dict на dict и set... :facepalm:
Был разочарован, что модуль operator в этом никак не помогает :mrgreen:
Теперь придётся городить огород с специальным классом...

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group