for 语句

Python中的for语句和CPascal中可能使用的语句有所不同。通常的循环可能会依据一个等差数值步进过程(如Pascal),或由用户来定义迭代步骤和中止条件(如C),Pythonfor语句依据任意序列(链表或字符串)中的子项,按它们在序列中的顺序来进行迭代。示例:

>>> # Measure some strings:
... words = ['cat', 'window', 'defenestrate']
>>> for w in words:
...     print(w, len(w))
...
cat 3
window 6
defenestrate 12

在迭代过程中修改迭代序列并不安全(只有在使用链表这样的可变序列时才会发生这样的情况)。如果想要修改迭代的序列(如,复制选择项),可以迭代它的复本。使用切割标识就可以很方便的做到这一点:

>>> for w in words[:]:  # Loop over a slice copy of the entire list.
...     if len(w) > 6:
... words.insert(0, w)
...
>>> words
['defenestrate', 'cat', 'window', 'defenestrate']

注意,在这个例子中,这个示例将尝试创建一个无限列表,重复插入。

range() 函数

如果需要一个数值序列,内置函数range()就派上了用场,它生成一个等差级数链表:

>>> for i in range(5):
...     print(i)
...
0
1
2
3
4

给定的终点不是生成的序列的一部分, range(10)产生10个值,即长度为10的序列的项的合法索引。可以让范围从另一个数字开始,或者指定不同的增量(甚至是负数;有时称为“步长”):

range(5, 10)
   5 through 9
range(0, 10, 3)
   0, 3, 6, 9
range(-10, -100, -30)
  -10, -40, -70

要遍历序列的索引,可以组合range()和len()函数联合使用,示例如下:

>>> a = ['Mary', 'had', 'a', 'little', 'lamb']
>>> for i in range(len(a)):
...     print(i, a[i])
...
0 Mary
1 had
2 a
3 little
4 lamb

然而,在大多数情况下,使用该enumerate() 功能很方便。

如果只是打印一个序列的话会发生奇怪的事情:

>>> print(range(10))
range(0, 10)

在许多方面,返回对象的range()行为就像它是一个列表,但实际上它不是。它是一个对象,当开发者遍历它时返回所需序列的连续项,但它并不真正使列表,从而节省空间。

我们称此类对象是 可迭代的,即适合作为那些期望从某些东西中获得连续项直到结束的函数或结构的一个目标(参数)。。我们已经见过的 for 语句就是这样一个迭代器,list() 函数是另外一个迭代器 ,它从可迭代(对象)中创建列表:

>>> list(range(5))
[0, 1, 2, 3, 4]

break 和 continue 语句, 以及循环中的 else 子句

break语句和C中的类似,用于跳出最近的一级for或while循环。

循环可以有一个else子句;它在循环迭代完整个列表(对于 for )或执行条件为 false (对于 while )时执行,但循环被break中止的情况下不会执行。以下搜索素数的示例程序演示了这个子句:

>>> for n in range(2, 10):
...     for x in range(2, n):
... if n % x == 0:
...     print(n, 'equals', x, '*', n//x)
...     break
...     else:
... # loop fell through without finding a factor
... print(n, 'is a prime number')
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3

注意,当与循环一起使用时,else子句与try语句的else子句比与if语句的具有更多的共同点:try语句的else子句在未出现异常时运行,循环的else子句在未出现break时运行。

continue语句是从C中借鉴来的,它表示循环继续执行下一次迭代,示例:

>>> for num in range(2, 10):
...     if num % 2 == 0:
... print("Found an even number", num)
... continue
...     print("Found a number", num)
Found an even number 2
Found a number 3
Found an even number 4
Found a number 5
Found an even number 6
Found a number 7
Found an even number 8
Found a number 9

pass 语句

pass 语句什么也不做。它用于那些语法上必须要有什么语句,但程序什么也不做的场合,示例:

>>> while True:
...     pass  # Busy-wait for keyboard interrupt (Ctrl+C)
...

这通常用于创建最小结构的类:

>>> class MyEmptyClass:
...     pass
...

pass可以在创建新代码时,用来做函数或控制体的占位符,从而可以让开发者在更抽象的层面上思考。pass 可以自动忽略:

>>> def initlog(*args):
...     pass   # Remember to implement this!
...

关注下方微信公众号“Java精选”(w_z90110),回复关键词领取资料:如Mysql、Hadoop、Dubbo、Spring Boot等,免费领取视频教程、资料文档和项目源码。

Java精选专注程序员推送一些Java开发知识,包括基础知识、各大流行框架(Mybatis、Spring、Spring Boot等)、大数据技术(Storm、Hadoop、MapReduce、Spark等)、数据库(Mysql、Oracle、NoSQL等)、算法与数据结构、面试专题、面试技巧经验、职业规划以及优质开源项目等。其中一部分由小编总结整理,另一部分来源于网络上优质资源,希望对大家的学习和工作有所帮助。

评论

分享:

支付宝

微信