我当前的代码使用十进制赋值One line if-condition-assignment,但是使用更详细的标识符很容易通过行长度限制。你知道吗
由于我还没有进入pythonic编码,我很高兴看到一些重构建议。你知道吗
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/)也可以围绕所示示例重构整个代码。。。这个示例片段来自带有参数的函数,参数可以是标量float/int或1Dnumpy.数组. 如果它是一个数组,它会将每个项应用于每个标签,只是简单的标量,它会将它全局应用于所有标签) 但是这里又是怎样的Python方式呢?什么时候开始更彻底地重构,什么时候保持原状——因为它能工作?你知道吗
这里的问题是,您要为每个变量重复自己的操作;如果对象是数组,则为其编制索引,否则直接使用对象。我在这里使用一个实用函数:
注意,我使用^{} 测试每个对象的类型,请参见What are the differences between type() and isinstance()?
另一个选择是不测试数组每次迭代。测试一次,如果不是数组,则将标量float或int值转换为预期长度的序列:
或者,再次使用助手函数:
此时可以使用
zip()
进行迭代:相关问题 更多 >
编程相关推荐