Найти - Пользователи
Полная версия: Функция, соответствующая оператору OR
Начало » Python для экспертов » Функция, соответствующая оператору OR
1 2
Dimka665
Хочу передать в качестве параметра функцию, которая соответствовала бы выражению X or Y, то есть вернуть первый операнд, если bool(X) - True, иначе второй.
в модуле operator полно различный функций, но аналогов логических нет! почему они отсутствуют?
regall
А зачем они там, если можна, например, так:
myOr = lambda x,y: x or y
ZZZ
regall
А зачем они там, если можна, например, так:
Ну так и всё остальное из модуля operator можно так написать…
Тоже не очень понимаю, зачем это надо… Разве что для функциональщины.
veon
Они работают быстрее, чем лямбды, если применять их, например, в reduce.

>>> timeit.timeit("reduce(lambda x,y: x|y, range(1000))", number=1000)
0.4297667419650395
>>> timeit.timeit("reduce(operator.or_, range(1000))", "import operator", number=1000)
0.15156629485321105
Но вот так даже ещё лучше
>>> timeit.timeit("a=0\nfor x in range(1000): a|=x", number=1000)
0.14097952174410011
ZZZ
Хм… Интересно… Буду иметь в виду.

veon
operator.or_
А вот и ответ на первоначальный вопрос! :-)
Dimka665
ZZZ
veon
operator.or_
А вот и ответ на первоначальный вопрос! :-)
это побитовое ИЛИ. совсем другое.
ZZZ
Ну ладно, сорри… Невнимательный я сегодня…
Андрей Светлов
Оператор or нельзя переопределить. У него нет имени магического метода.
Поэтому в operators он не доступен (как и логические and, not)
ZZZ
Т.е. он просто спрашивает bool(obj.__nonzero__()), bool(obj.__len__())… и сравнивает?
А почему нельзя было сделать методом?
Андрей Светлов
Потому что это ленивый оператор, и он работает немного иначе, чем вы указали.
Гляньте-ка на http://www.python.org/dev/peps/pep-0335/
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB