python 利用 dictionary 的 .get() 操作,避免寫 if-else
阿新 • • 發佈:2020-11-24
# from https://github.com/DropEdge/DropEdge/blob/master/src/normalization.py def fetch_normalization(type): switcher = { 'NormLap': normalized_laplacian, # A' = I - D^-1/2 * A * D^-1/2 'Lap': laplacian, # A' = D - A 'RWalkLap': random_walk_laplacian, # A' = I - D^-1 * A 'FirstOrderGCN': gcn, # A' = I + D^-1/2 * A * D^-1/2 'AugNormAdj': aug_normalized_adjacency, # A' = (D + I)^-1/2 * ( A + I ) * (D + I)^-1/2 'BingGeNormAdj': bingge_norm_adjacency, # A' = I + (D + I)^-1/2 * (A + I) * (D + I)^-1/2 'NormAdj': normalized_adjacency, # D^-1/2 * A * D^-1/2 'RWalk': random_walk, # A' = D^-1*A 'AugRWalk': aug_random_walk, # A' = (D + I)^-1*(A + I) 'NoNorm': no_norm, # A' = A 'INorm': i_norm, # A' = A + I } # func = switcher.get(type, lambda: "Invalid normalization technique.") func = switcher.get(type, default = lambda x: print(x, "is Invalid normalization technique.")) return func
上述程式碼相當於 C++ 的 switch-case 語句,比 if-else 語句簡潔很多,易於擴充套件,且不易出錯。