在Python 2.7中对Range的误解

时间:2017-10-19 17:56:03

标签: python-2.7 primes

我一直在做一些练习,并为你们提出一个问题。 跟着我添加的图片。 对于number =2,我们在第二行中获得的范围是从22

所以,为什么我不会收到一些错误消息?它是如何工作的?

程序如何知道跳过它并返回True

代码:

def main(number):
    for i in range(2,int(number**0.5)+1):
        if number % i == 0:
            return False
    return True
print main(2)

谢谢! code example

1 个答案:

答案 0 :(得分:0)

有些人认为Python在export class Component { onKey(event:any) { console.log('event', event); } } In : datetime.now().strftime('%d.%m.%Y %H:%M:%S.%f') Out: '19.10.2017 20:04:55.947244' 之间附加了一些特殊语法,但for是一个支持迭代的对象

这意味着它有一个返回迭代器的range函数,这支持iterator protocol。这是一个允许我们枚举该对象的项目的协议。就像我们也可以枚举列表,元组,集等等。

另一方面,

range只是使用这个协议,因此对于每次迭代,它的目的是从迭代器中获取下一个元素。如果有下一个元素,它会将该元素分配给左侧的变量。如果迭代器耗尽(不再有元素),它就会停止。

如果您构建__iter__对象for。该范围对象被认为是为空:它根本不会枚举任何项目。 range(start,stop) 知道它在枚举什么,但由于stop <= start元素上的迭代器只是说没有元素for停止。

如果range(..)小于或等于forrange(..)引发错误会更好。但通常通缉行为没有错误上升,循环根本就不执行。

您可以将stop与Java / C ++语言系列中的构造进行比较:

start

在这种情况下,如果for i in range(0,n)小于或等于零,则也不会执行循环。 for(int i = 0; i < n; i++) { //... } 对象有点像这种循环的生成器。

另外需要注意的是n实际上比此答案中描述的要复杂得多,因为您还可以添加range(..),并且可以倒计时。但这对这个答案的语义没有影响。

通过在range语句中使用生成器,可以使代码更加优雅。像:

step

此外,我们只需检查奇数除数(和2)即可提升性能:

all