在这种情况下如何避免多次编写类似的代码?
How to avoid write similar code multiple times in this situation?
我有这样的代码,
i = 0
l1 = ['a','b','c']
while(i < len(l1)):
if i + 2 < len(l1):
if l1[i + 2] == 'c':
print("ok")
else:
print("None,Error!")
else:
print("None,Error!")
i += 1
可以看到,在else
部分,print("None,Error!")
用了两次。实际上,它们很长但完全相同,所以我想合并它们使它们成为 simple.However,我需要检查 i+2
是否超出列表范围,所以我不能将其重写为 [=15] =]
if i+2 < len(l1) and l1[i + 2] == 'c':
有什么办法可以解决这个问题吗?
正如 Phu Ngo 所说,我们可以利用 short circuiting 来写
i = 0
l1 = ['a','b','c']
while(i < len(l1)):
if i + 2 < len(l1) and l1[i + 2]=='c':
print("ok")
else:
print("None,Error!")
i+=1
如果 i+2<len(l1)
为假,则表达式 l1[i + 2]=='c'
永远不会被计算,这意味着不会引发错误。
这里可以考虑的另一种解决方案是 try/except 子句。
i = 0
l1 = ['a','b','c']
while(i < len(l1)):
try:
if l1[i+2]=='c':
print("ok")
else:
raise ValueError
except Exception:
print("None,Error!")
i+=1
两者都会打印输出
ok
None,Error!
None,Error!
除非你的数据很大,否则放弃算法细节,只
以方便的方式排列数据:
xs = ['a', 'b', 'c']
for x1, x2 in zip(xs, xs[2:] + [None, None]):
print("ok" if x2 == 'c' else "None,Error!")
一般观点的另一个例证:很少见
需要通过索引遍历集合。
我有这样的代码,
i = 0
l1 = ['a','b','c']
while(i < len(l1)):
if i + 2 < len(l1):
if l1[i + 2] == 'c':
print("ok")
else:
print("None,Error!")
else:
print("None,Error!")
i += 1
可以看到,在else
部分,print("None,Error!")
用了两次。实际上,它们很长但完全相同,所以我想合并它们使它们成为 simple.However,我需要检查 i+2
是否超出列表范围,所以我不能将其重写为 [=15] =]
if i+2 < len(l1) and l1[i + 2] == 'c':
有什么办法可以解决这个问题吗?
正如 Phu Ngo 所说,我们可以利用 short circuiting 来写
i = 0
l1 = ['a','b','c']
while(i < len(l1)):
if i + 2 < len(l1) and l1[i + 2]=='c':
print("ok")
else:
print("None,Error!")
i+=1
如果 i+2<len(l1)
为假,则表达式 l1[i + 2]=='c'
永远不会被计算,这意味着不会引发错误。
这里可以考虑的另一种解决方案是 try/except 子句。
i = 0
l1 = ['a','b','c']
while(i < len(l1)):
try:
if l1[i+2]=='c':
print("ok")
else:
raise ValueError
except Exception:
print("None,Error!")
i+=1
两者都会打印输出
ok
None,Error!
None,Error!
除非你的数据很大,否则放弃算法细节,只 以方便的方式排列数据:
xs = ['a', 'b', 'c']
for x1, x2 in zip(xs, xs[2:] + [None, None]):
print("ok" if x2 == 'c' else "None,Error!")
一般观点的另一个例证:很少见 需要通过索引遍历集合。