我必须使用一些现有的(很旧的)C库的几乎1:1的Python翻译,然后发现了问题。
原始代码为:
int i, n;
//...
for (i = 0; i < n; i++)
if (someCondition(i))
doSomething();
break;
if (i == n)
doSomeOtherStuff();
它被翻译为
for i in range(n):
if someCondition(i):
doSomething()
break
if i == n:
doSomeOtherStuff()
问题是,如果i
从不为真,则循环后n - 1
等于someCondtion(i)
。
我的解决方法是
found = False
for i in range(n):
if someCondition(i):
doSomething()
found = True
break
if not found:
doSomeOtherStuff()
有更好的解决方案吗?我希望代码更改最少的解决方案仍然能够比较C和Python实现。 Python代码仅用于测试,C实现是生产代码。因此,没有性能要求,只有可读性。
答案 0 :(得分:6)
Python for
statement有一个可选的else
套件,如果项目用尽,则执行该套件,但是如果您break
否则退出循环,则不是早。因此,您可以将代码编写为:
for i in range(n):
if someCondition(i):
doSomething()
break
else:
doSomeOtherStuff()
答案 1 :(得分:3)