I remembered that callable was deprecated, but it has been re-added in python 3.2.

I admin checking for hashable is paranoid, but theoretically someone could remove __hash__ from a function. If you think that's too much I'm fine with it. Also, dict and list have __hash__ but its None, so this check doesn't even work.