【发布时间】:2019-03-01 12:30:03
【问题描述】:
我当前的代码使用三元分配One line if-condition-assignment,但使用更详细的标识符很容易超过行长限制。
由于我还没有进入 Python 编码,我很高兴看到一些重构建议。
for label in range(num_labels):
d_tresh = drop_treshold[label] if type(drop_treshold) == numpy.ndarray) else drop_treshold
r_tresh1 = relabel_treshold1[label] if type(relabel_treshold1) == numpy.ndarray else relabel_treshold1
r_tresh2 = relabel_treshold2[label] if type(relabel_treshold2) == numpy.ndarray else relabel_treshold2
使用局部短变量名似乎是解决方案的一部分,但我喜欢有更多解释性的函数参数。嗯。如此显着缩短函数参数名称会导致(对我而言)不可读的代码。
for l in range(n_labels):
t0 = d_t[l] if type(d_t) == numpy.ndarray) else d_t
t1 = r_t1[l] if type(r_t1) == numpy.ndarray else r_t1
t2 = r_t2[l] if type(r_t2) == numpy.ndarray else r_t1
那么我应该求助于多行 if - else 分配吗?它会极大地扩展和膨胀简单的逻辑。
for label in range(num_labels):
if type(drop_treshold) == numpy.ndarray):
d_tresh = drop_treshold[label]
else:
d_tresh = drop_treshold
if type(relabel_treshold1) == numpy.ndarray:
r_tresh1 = relabel_treshold1[label]
else:
d_tresh = relabel_treshold1
if type(relabel_treshold2) == numpy.ndarray:
r_tresh2 = relabel_treshold2[label]
else:
d_tresh = relabel_treshold2
(当然,我(sh/)也可以围绕所示示例重构整个代码...这个示例 sn-p 来自带有参数的函数,可以是标量 float/int 或 1D numpy.array。如果是一个数组,它将每个项目应用于每个标签,只是简单的标量,它将全局应用于所有标签) 但是这里又是如何pythonic 方式?什么时候开始更彻底地重构,什么时候保持原样——因为它有效?
【问题讨论】:
标签: python if-statement refactoring