我想将NetworkX Graph对象用作Python中的键dict.但是,我不希望比较的默认行为(即,通过对象的地址).相反,我希望同构图指代是相同元素的关键dict.
这种行为是否已在某处实施?我找不到这个方向的任何信息.
如果我必须自己实施,以下评估是否现实?
networkx.Graph上课.__eq__它调用is_isomorphic.__hash__以某种方式定义(欢迎建议).我认为我必须使这个包装的Graph不可变,因为:
如果一个类定义了可变对象并实现了一个
__eq__()方法,那么它就不应该实现__hash__(),因为hashable集合的实现要求一个键的哈希值是不可变的(如果对象的哈希值改变,它将在错误的哈希桶中).
假设有一个函数costly_function_a(x):
x; 和在这些条件下,x我们可以将结果存储在临时变量中,然后使用该变量进行这些计算,而不是连续两次调用函数.
现在假设有一些功能(f(x),g(x)并h(x)调用在下面的示例)costly_function_a(x),并且其中的一些功能可以调用彼此(在下面的例子中,g(x)与h(x)两个呼叫f(x)).在这种情况下,使用在重复调用以上仍结果提到的简单的方法costly_function_a(x)用相同的x(见OkayVersion下文).我确实找到了一种最小化呼叫次数的方法,但它"丑陋"(见FastVersion下文).有没有更好的方法来做到这一点?
#Dummy functions representing extremely slow code.
#The goal is to call these costly functions as rarely as possible.
def costly_function_a(x):
print("costly_function_a has been called.")
return x #Dummy operation.
def costly_function_b(x):
print("costly_function_b has been called.")
return 5.*x #Dummy operation.
#Simplest (but slowest) implementation.
class SlowVersion:
def …Run Code Online (Sandbox Code Playgroud)