Sysop: | Amessyroom |
---|---|
Location: | Fayetteville, NC |
Users: | 23 |
Nodes: | 6 (0 / 6) |
Uptime: | 40:47:53 |
Calls: | 583 |
Calls today: | 1 |
Files: | 1,138 |
Messages: | 110,394 |
## The question is how to write such an operator. I wrote this one:
def op(x, b):
return isinstance(x, int) or b
Ethan Carter <ec1828@somewhere.edu> wrote or quoted:
## The question is how to write such an operator. I wrote this one:
def op(x, b):
return isinstance(x, int) or b
The main snag with your op function and how you're using
reduce is the switch-up in the argument order that "reduce"
expects versus how you set up op.
"functools.reduce" calls the reducer function "op" with two
arguments: the accumulated value so far first, then the
next element from the iterable.
You wrote "op" as "op(x, b)", where you treat "x" like an element
and "b" like a boolean accumulator, but actually "reduce" hands
the accumulator first, then the element.
So when "reduce" runs, the first argument "x" is actually the boolean
accumulator, and the second "b" is the next element.