14

I need to pass a function as a parameter that works as the boolean "not". I tried something like this but it didn't work because not isn't a function.

theFunction(callback=not) # Doesn't work :(

I need to do the following, but I wonder if there exists any predefined function that does this simple job, so that I don't have to redefine it like this:

theFunction(callback=lambda b: not b, anotherCallback=lambda b: not b)

Note: I can't change the fact that I have to pass a function like this because it's an API call.

germanfr
  • 547
  • 5
  • 19

2 Answers2

26

Yes, there is the operator module: https://docs.python.org/3.6/library/operator.html

import operator
theFunction(callback=operator.not_)
quamrana
  • 37,849
  • 12
  • 53
  • 71
14

not is not a function, but a keyword. So that means you can not pass a reference. There are good reasons, since it allows Python to "short circuit" certain expressions.

You can however use the not_ (with underscore) of the operator package:

from operator import not_

theFunction(callback=not_, anotherCallback=not_)
Willem Van Onsem
  • 443,496
  • 30
  • 428
  • 555