2014 dxdy logo

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

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




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


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

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


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

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


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

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


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

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


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

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


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

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

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

-- 25.08.2023, 21:02 --

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

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

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


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

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


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

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

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


23/12/05
12068
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
4743
photon в сообщении #1606575 писал(а):
в словаре all_checks функции, каждая из которых делает свою проверку

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

-- 25.08.2023, 22:34 --

(Оффтоп)

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

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

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



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

Сейчас этот форум просматривают: Geen


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

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