这个问题可能看起来很基本,但是,我想改进我写的代码。我有一个函数,将需要2或3个参数,取决于一些其他条件。我正在检查长度并用and if语句传递2或3(参见代码)。我确信一定有一种更好、更简洁的方法来重写一行/一句话,而不是使用IIFs。抱歉,我对python还比较陌生
dist = distr.gum
# ... or: dist = distr.gev
# parFitHist has length 2 for distr.gum or 3 for distr.gev
parFitHist = dist.fit(ppt_hist)
# now I check if
if len(parFitBase) > 2:
# 3 parameters for distr.gev
t_mp = dist.cdf(ppt_fut, parFitFut[0], parFitFut[1], parFitBase[2])
else:
# 2 parameters for distr.gum
t_mp = dist.cdf(ppt_fut, parFitFut[0], parFitFut[1])
不确定您拥有什么数据类型以及方法的外观,但使用*args可以解决这个问题:
你可以这样称呼它:
在本例中,
params
是一个元组,包含除第一个参数外的所有参数可以使用
*
将列表元素解压到函数调用中你不需要知道列表中有多少项就可以做到这一点。但这意味着如果项数与函数参数不匹配,则可能会引入错误。因此,检查数据是否有基本的合理性也是一个好主意
例如:
你可以在这里阅读更多信息:Unpacking Argument Lists
欢迎使用python。请考虑使用pep8格式化代码。这是一个很好的方法来尊重约定,让你的代码更容易被其他人阅读
Variable names应该是小写,并用下划线分隔
关于您的问题,一种改进方法是将
len(par_fit_base)
传递给函数并在那里执行if子句。这将使它更流畅地阅读代码。这是假设par_fit_fut
总是具有相同的长度,而不管par_fit_base
相关问题 更多 >
编程相关推荐