我有很多变量,在代码开头加载了一些腌制文件,还有许多函数。由于所有主要算法都是在函数内部执行的(这些函数是多个嵌套函数),因此我发现每次执行函数时都向这些函数发送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)
我的问题与特定代码无关,这就是为什么我没有提供任何变量“值”等。我问的是“编写更好的代码”,实际上我是一位机械工程师,对“代码”非常陌生组织/结构”
答案 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)