我一直在做一些练习,并为你们提出一个问题。
跟着我添加的图片。
对于number =2
,我们在第二行中获得的范围是从2
到2
。
所以,为什么我不会收到一些错误消息?它是如何工作的?
程序如何知道跳过它并返回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)
谢谢!
答案 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(..)
小于或等于for
,range(..)
引发错误会更好。但通常通缉行为没有错误上升,循环根本就不执行。
您可以将stop
与Java / C ++语言系列中的构造进行比较:
start
在这种情况下,如果for i in range(0,n)
小于或等于零,则也不会执行循环。 for(int i = 0; i < n; i++) {
//...
}
对象有点像这种循环的生成器。
另外需要注意的是n
实际上比此答案中描述的要复杂得多,因为您还可以添加range(..)
,并且可以倒计时。但这对这个答案的语义没有影响。
通过在range
语句中使用生成器,可以使代码更加优雅。像:
step
此外,我们只需检查奇数除数(和2)即可提升性能:
all