将函数用作字典键是否被认为是错误的形式?例如:
def add(a, b):
return a + b
mydict = {add: "hello"}
答案 0 :(得分:5)
是的,这完全有效。例如,您可以使用它来存储计数器调用函数的次数:
def hi():
print('hi')
funcs = {hi: 0}
print(funcs)
# {<function hi at 0x10fb39950>: 0}
for func in funcs:
func()
# hi
funcs[func] += 1
print(funcs)
# {<function hi at 0x10fb39950>: 1}
那就是说,这是一种倒退的做事方式。有一个更简单的类型作为字典键,如字符串或int。
答案 1 :(得分:0)
函数通过function
类的实例表示:
>>> def f():
... pass
...
>>> f
<function f at 0x000001D397363E18>
>>> help(type(f))
class function(object)
| function(code, globals[, name[, argdefs[, closure]]])
因此,函数类是从object
类派生的,并且继承了__hash__
方法。 __hash__
类中object
方法的默认实现使用rotating right 4 bits的返回值id()
计算哈希。对象的id()
是内存地址。
这就是函数获取哈希的方式。从技术上讲,具有 some 不变状态的任何事物都可以具有哈希。