python 循环解惑

摘要:大多数人从C/C++系列语言转移到python语言的过程中,会在循环方式上长期存在很大的质疑,毕竟这二者的循环类别有很大的不同。书写循环的时候,很可能会疑问,什么对象可以拿来循环,什么对象不可循环?本文主要探讨python中的循环,并对比和C语言中循环的不同。


1.C和python循环的不同

大多数人从C/C++系列语言转移到python语言的过程中,会在循环方式上长期存在很大的质疑,毕竟这二者的循环类别有很大的不同。
在C语言中,我们这样书写循环:
for(i=0;i<10;i++){
	sum+=i;
}

在python中,我们这样写:
for i in range(10):
	sum+=i;
是不是很不习惯?如果需要按照2递增呢?
C语言:
for(i=0;i<10;i+=2){
	sum+=i;
}
python:
for i in range(0,10,2):
	sum+=i
Note:C语言中,我们用的是增量的方式,循环有三要素:初始值、增量、循环边界;python中,循环仅仅需要一个——可迭代类型。

2.迭代器和iter()函数

python的迭代无缝支持序列对象,还允许迭代非序列对象但表现出序列行为的对象——字典的key、文件的行等等。
从根本上说,迭代器就是一个有next方法的对象,而不是通过索引来计数。当next都获取完毕的时候,引发StopIteration异常,不表示错误发生,而表示调用完毕。
> mytuple=(12, 'xyz',34)
> i=iter(mytuple)
> i.next()
12
> i.next()
'xyz'
> i.ntext()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  AttributeError: 'tupleiterator' object has no attribute 'ntext'


可见,迭代器内部有一个隐形的不可见的指针,指向next的下一个元素。任何for或者while循环实际上是通过迭代类型来实现的。

上文中,我们观看了序列类型用作迭代器的情况,下面,我们看看另外两种数据类型用作迭代器的情况:

2.1字典
字典的迭代器会遍历它的key,for eachkey in mydic.keys() 可以缩写:for eachekey in mydic.

2.2文件
文件对象生成器会自动调用readline方法
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值