Python中“和不”的用途是什么?

时间:2017-08-13 08:36:44

标签: python-3.x

为什么代码在没有“未找到”的情况下无效。这个陈述有什么用?

def BinarySearch(alist, item):
  first=0
  last=len(alist)-1
  found=False  
  while first<=last and not found: 
    midpt= (first+last)//2
    if alist[midpt] == item:
      found=True
    else:
      if item < alist[midpt]:
        last=midpt-1
      else:
        first=midpt+1
  return(found)

alist=[1,2,3,4,5]
item=8
print(BinarySearch(alist,item)

2 个答案:

答案 0 :(得分:0)

这不是一个陈述,它是一个表达式(三个表达式*,真的)。

如果删除and not found部分,搜索将在找到该项目时不会停止,它会一直持续到达结束。使用and not found时,它会在找到项目时停止。

在您的情况下,由于您正在寻找列表中找不到的内容(8),因此它没有任何区别。但是,如果你寻找,3,它会。

*不必要的细节:

  1. 访问变量是一个导致变量包含的值的表达式,因此found中的and not found是表达式。
  2. not v1(其中 v1 是来自#1的值)是第二个表达式:它接受给定值并取消它。
  3. v0 and v2(其中 v2 是来自#2的值, v0 and not found之前的表达式的结果)是第三个表达式:当两个操作数都为真时,结果为true,否则为false。

答案 1 :(得分:0)

True是一个布尔标志,用于指示您是否找到了您一直在寻找的项目。一旦你找到它,没有必要继续寻找它,你应该回来。

一个可以说是更简洁的实现方法是使用早期返回范例,并在找到项目后返回def BinarySearch(alist, item): first = 0 last = len(alist) - 1 while first<=last: midpt = (first+last)//2 if alist[midpt] == item: return True if item < alist[midpt]: last = midpt - 1 else: first = midpt + 1 return False

public IEnumerable<dynamic> MyQuery()
{
    const string queryString = " SELECT ..... " ; // this is my complex sql query
    var result = context.Database.SqlQuery<dynamic>(queryString).ToList();
    return result;
}