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

时间:2019-07-10 12:44:40

标签: python python-3.x

我有很多变量,在代码开头加载了一些腌制文件,还有许多函数。由于所有主要算法都是在函数内部执行的(这些函数是多个嵌套函数),因此我发现每次执行函数时都向这些函数发送10-15个变量和泡菜加载的常量非常不切实际。

下面,我只放入5个泡菜加载的常量(实际代码中实际上有11个)和一些变量teta_ls,phi_ls,k,N,ti,fi,anm_offline

所以,我相信应该有更多的Python实用方法来将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)

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

2 个答案:

答案 0 :(得分:1)

将它们打包成字典,并用键作为参数名称,然后** kwarg在函数调用中将其打包

答案 1 :(得分:1)

您可以循环打开文件:

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)