在while比较表达式中赋值

2024-10-05 10:07:08 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我想知道是否可以在代码的while比较部分赋值。在

下面是当前代码的一个示例

startIndex = find(target, key, startIndex)
while( startIndex != -1):
    matchesFound += 1
    startIndex = find(target, key, startIndex + 1)
return matchesFound

我要做的是将startIndex=find(target,key,startIndex)移到while比较表达式中,这样它看起来像这样

^{pr2}$

如果不是,那么什么是更好的重构呢?在

谢谢

编辑 在尝试著名的6.001模块之前,我正在学习麻省理工学院开放式课件6.00


Tags: 模块key代码编辑示例targetreturn表达式
3条回答

你在用Python编写C语言。在

尝试:

startIndex = -1
while True:
    startIndex = find(target, key, startIndex + 1)
    if startIndex < 0:
        break
    matchesFound += 1
return matchesFound

或者甚至:

^{pr2}$

如果出于某种原因,您无法从您正在搜索的任何内容中使用更合适的方法,则这相当于您在以下问题中的工作代码:

start = 0
count = 0
for match in iter(lambda: find(target, key, start), -1):
  count += 1
  start = match + 1
return count

但是,编写一个迭代器来查找这些匹配项,“转换”当前的查找函数,可以获得最大的好处:

^{pr2}$

然后从中计算:

count = sum(1 for m in findall(target, key))

不,在Python中不能这样做。我认为Python不允许这样做的主要原因是为了避免由于混淆赋值和等式检查而导致的频繁错误。在

Python声称以可读代码作为主要准则,所以我认为您的原始代码很好。不需要重构。。。在

相关问题 更多 >

    热门问题