每次向不同的函数发送多个变量的最有效/用户友好的方法是什么?

2024-05-15 05:15:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有很多变量,一些在代码开头加载的pickle文件和许多函数。由于所有的主要算法都是在函数(多个嵌套函数)内部执行的,因此每次需要执行函数时,我都会向这些函数发送10-15个变量和pickle加载的常量,这是非常不实际的。你知道吗

下面我只将5个pickle加载的常量(实际上在实际代码中有11个)和一些变量teta\ls、phi\ls、k、N、ti、fi、anm\u脱机

因此,我认为应该有一种更为实用的方法,将16-17个参数传递给我使用的函数

file = open("spherical_jn_der_offline","rb")
spherical_jn_der_offline = pickle.load(file)
file.close()

file = open("spherical_jn_offline","rb")
spherical_jn_offline = pickle.load(file)
file.close()

file = open("sph_harm_offline","rb")
sph_harm_offline = pickle.load(file)
file.close()

file = open("spherical_bn_offline","rb")
spherical_bn_offline = pickle.load(file)
file.close()

file = open("sph_harm_offline_der","rb")
sph_harm_offline_der = pickle.load(file)
file.close()

def interpolation(N, k, ti, fi,anm_offline,spherical_jn_der_offline,spherical_jn_offline,sph_harm_offline,spherical_bn_offline),sph_harm_offline_der):

        p_grad = grad(teta_ls, phi_ls, k, N, ti, fi,anm_offline,spherical_jn_der_offline,spherical_jn_offline,sph_harm_offline,spherical_bn_offline),sph_harm_offline_der) 
        u = calc_u(p_grad, ro, k, f[fi])  
        p = pressure_field(fi, ti, N,anm_offline,spherical_jn_der_offline,spherical_jn_offline,sph_harm_offline,spherical_bn_offline),sph_harm_offline_der)  
        I_act, In = ia(p, u)    

        return(p,I_act)

for ti in range(23350):
    for fi in range(257):
pressure_ls, I_ls = interpolation(N, k, ti, fi, anm_offline,spherical_jn_der_offline,spherical_jn_offline,sph_harm_offline,spherical_bn_offline),sph_harm_offline_der)

我的问题与具体的代码无关,这就是为什么我没有提供任何变量“值”等。我问的是“编写更好的代码”,实际上我是一名机械工程师,对“代码组织/结构”非常陌生


Tags: 函数代码tilspicklefifilejn
2条回答

将它们打包到一个dict中,其中键是参数名,**kwargs在函数调用中解包它们

您可以在循环中打开文件:

files = ["spherical_jn_der_offline", "spherical_jn_offline"] # etc....
arguments = []

for file in files:
    fd = open(file,"rb")
    arguments.append(pickle.load(file))
    fd.close()

然后可以将arguments列表解压到函数中:

for ti in range(23350):
    for fi in range(257):
        pressure_ls, I_ls = interpolation(N, k, ti, fi, anm_offline, *arguments)

相关问题 更多 >

    热门问题