Skip to main content
 首页 » 编程设计

python之破坏 Python if 语句

2025年05月04日12jyk

我必须在一个代码中处理一堆 if 语句。它们都是一样的,只有细微的变化。有什么办法可以妥协所有这些代码并使其更优雅、更短吗?

代码如下:

if con_name == 'coh': 
    coh = my_coherence(n_freqs, Rxy_mean, Rxx_mean, Ryy_mean) 
    coh_surro = my_coherence(n_freqs, Rxy_s_mean, Rxx_s_mean, Ryy_s_mean) 
    return coh, coh_surro, freqs, freqs_surro 
 
if con_name == 'imcoh': 
    imcoh = my_imcoh(n_freqs, Rxy_mean, Rxx_mean, Ryy_mean) 
    imcoh_surro = my_imcoh(n_freqs, Rxy_s_mean, Rxx_s_mean, Ryy_s_mean) 
    return imcoh, imcoh_surro, freqs, freqs_surro 
 
if con_name == 'cohy': 
    cohy = my_cohy(n_freqs, Rxy_mean, Rxx_mean, Ryy_mean) 
    cohy_surro = my_cohy(n_freqs, Rxy_s_mean, Rxx_s_mean, Ryy_s_mean) 
    return cohy, cohy_surro, freqs, freqs_surro 
 
if con_name == 'plv': 
    plv = my_plv(n_freqs, Rxy, Rxy_mean) 
    plv_surro = my_plv(n_freqs, Rxy_s, Rxy_s_mean) 
    return plv, plv_surro, freqs, freqs_surro 
 
if con_name == 'pli': 
    pli = my_pli(n_freqs, Rxy, Rxy_mean) 
    pli_surro = my_pli(n_freqs, Rxy_s, Rxy_s_mean) 
    return pli, pli_surro, freqs, freqs_surro 
 
if con_name == 'wpli': 
    wpli = my_wpli(n_freqs, Rxy, Rxy_mean) 
    wpli_surro = my_wpli(n_freqs, Rxy_s, Rxy_s_mean) 
    return wpli, wpli_surro, freqs, freqs_surro 

如果这太简单了,我很抱歉,但我试了又试,还是想不出办法。

请您参考如下方法:

没有反射(reflection)

func, flag = { 
    "coh": (my_coherence, True), 
    "imcoh": (my_imcoh, True) 
    "cohy": (my_cohy, True), 
    "ply": (my_plv, False), 
    "pli": (my_pli, False), 
    "wpli": (my_wpli, False) 
}[con_name] 
 
args = (n_freqs, Rxy_mean, Rxx_mean, Ryy_mean) if flag else (n_freqs, Rxy, Rxy_mean) 
surro_args = (n_freqs, Rxy_s_mean, Rxx_s_mean, Ryy_s_mean) if flag else (n_freqs, Rxy_s Rxy_s_mean) 
 
val = func(*args) 
surro = func(*surro_args) 
return val, surro, freqs, freqs_surro 

或者这也是可能的

... 
args = (Rxy_mean, Rxx_mean, Ryy_mean) if flag else (Rxy, Rxy_mean) 
surro_args = (Rxy_s_mean, Rxx_s_mean, Ryy_s_mean) if flag else (Rxy_s Rxy_s_mean) 
 
val = func(n_freqs, *args) 
surro = func(n_freqs *surro_args) 
... 

也许 flag 有一个很酷的名字来对这些函数进行分类。改用它。