Форум сайта python.su
![[RSS Feed] [RSS Feed]](/static/djangobb_forum/img/feed-icon-small.png) 
			 
							 0
  0   
								
								Хочу передать в качестве параметра функцию, которая соответствовала бы выражению X or Y, то есть вернуть первый операнд, если bool(X) - True, иначе второй.
в модуле operator полно различный функций, но аналогов логических нет! почему они отсутствуют?
Офлайн
 
							 3
  3   
								
								А зачем они там, если можна, например, так:
myOr = lambda x,y: x or y
Офлайн
 
							 26
  26   
								
								regallНу так и всё остальное из модуля operator можно так написать…
А зачем они там, если можна, например, так:
Офлайн
 
							 0
  0   
								
								Они работают быстрее, чем лямбды, если применять их, например, в 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Офлайн
 
							 26
  26   
								
								Хм… Интересно… Буду иметь в виду.
veonА вот и ответ на первоначальный вопрос! :-)
operator.or_
Офлайн
 
							 0
  0   
								
								ZZZэто побитовое ИЛИ. совсем другое.veonА вот и ответ на первоначальный вопрос! :-)
operator.or_
Офлайн
 
							 26
  26   
								
								Ну ладно, сорри… Невнимательный я сегодня…
Офлайн
 
							 14
  14   
								
								Оператор or нельзя переопределить. У него нет имени магического метода.
Поэтому в operators он не доступен (как и логические and, not)
Офлайн
 
							 26
  26   
								
								Т.е. он просто спрашивает bool(obj.__nonzero__()), bool(obj.__len__())… и сравнивает?
А почему нельзя было сделать методом?
Офлайн
 
							 14
  14   
								
								Потому что это ленивый оператор, и он работает немного иначе, чем вы указали.
Гляньте-ка на http://www.python.org/dev/peps/pep-0335/
Офлайн
![[RSS Feed] [RSS Feed]](/static/djangobb_forum/img/feed-icon-small.png)