1. 程式人生 > 實用技巧 >python 利用 dictionary 的 .get() 操作,避免寫 if-else

python 利用 dictionary 的 .get() 操作,避免寫 if-else

# 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 語句簡潔很多,易於擴充套件,且不易出錯。