【问题标题】:shortcuts in if-else condition pythonif-else条件python中的快捷方式
【发布时间】:2021-07-17 06:20:15
【问题描述】:

我的代码中有以下函数的缩写:

s = 0.5
m = np.nonzero((velo>freq-fthrow - s*maskwidth_f))
velo_mask = np.delete(velo, m)
spec_mask = np.delete(spec, m)
if (average(velo_mask<0.9):
 s = 0.8
 m = np.nonzero((velo>freq-fthrow - s*maskwidth_f))
 velo_mask = np.delete(velo, m)
 spec_mask = np.delete(spec, m)
else:
 s = 0.5
 m = np.nonzero((velo>freq-fthrow - s*maskwidth_f))
 velo_mask = np.delete(velo, m)
 spec_mask = np.delete(spec, m)

这意味着我必须首先根据 s​​ 的初始给定值计算两个数组,然后执行条件,根据它,我更改 s 的值,并且我希望重新运行基于之前的整个代码关于 s 的新值。 (我有一个循环,每次整个数据都发生变化)

其实是一个巨大的代码,我不想重写3次,一次计算平均值,if条件下,else条件下。

有没有办法告诉 python 在 if-else 条件下重新运行整个前一部分。

【问题讨论】:

  • 您可以使用一个函数并返回您需要的数据。在这种情况下,您似乎只使用velo_mask?

标签: python arrays numpy loops if-statement


【解决方案1】:

使用函数来避免代码重复。示例:

def create_mask(velo, spec, freq, fthrow, maskwidth_f, s):
    m = np.nonzero((velo > freq - fthrow - s * maskwidth_f))
    velo_mask = np.delete(velo, m)
    spec_mask = np.delete(spec, m)
    return velo_mask, spec_mask

...

s = 0.5
velo_mask, spec_mask = create_mask(velo, spec, freq, fthrow, maskwidth_f, s)

s = 0.8 if average(velo_mask < 0.9) else 0.5
velo_mask, spec_mask = create_mask(velo, spec, freq, fthrow, maskwidth_f, s)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 2011-06-14
    相关资源
    最近更新 更多