《史无前例!编程语言python斩获最有发展第一与排行榜第三!》深入 Python 流程控制

347 篇文章 12 订阅
129 篇文章 0 订阅

除了前面介绍的 [while] 语句,Python 还从其它语言借鉴了一些流程控制功能,并有所改变。

4.1. [if] 语句

也许最有名的是 [if]语句。例如:

>>> x = int(input("Please enter an integer: "))
Please enter an integer: 42
>>> if x < 0:
...      x = 0
...      print('Negative changed to zero')
... elif x == 0:
...      print('Zero')
... elif x == 1:
...      print('Single')
... else:
...      print('More')
...
More

可能会有零到多个 [elif]部分,[else]是可选的。关键字 ‘[elif]’ 是 ’else if’ 的缩写,这个可以有效地避免过深的缩进。[if] … [elif] … [elif] … 序列用于替代其它语言中的 switch 或 case 语句。

4.2. [for] 语句

Python 中的 [for] 语句和 C 或 Pascal 中的略有不同。通常的循环可能会依据一个等差数值步进过程(如 Pascal),或由用户来定义迭代步骤和中止条件(如 C ),Python 的 [for] 语句依据任意序列(链表或字符串)中的子项,按它们在序列中的顺序来进行迭代。例如(没有暗指):所以想学的同学,有必要听一下这位老师的课、领取python福利奥,想学的同学可以到梦子老师的围鑫(同音):前排的是:762,中间一排是:459,后排的一组是:510 ,把以上三组字母按照顺序组合起来即可她会安排学习的。

>>> # 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']

4.3. [range()] 函数

如果你需要一个数值序列,内置函数 [range()] 会很方便,它生成一个等差级数链表:

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

range(10) 生成了一个包含 10 个值的链表,它用链表的索引值填充了这个长度为 10 的列表,所生成的链表中不包括范围中的结束值。也可以让 [range()] 操作从另一个数值开始,或者可以指定一个不同的步进值(甚至是负数,有时这也被称为 “步长”):所以想学的同学,有必要听一下这位老师的课、领取python福利奥,想学的同学可以到梦子老师的围鑫(同音):前排的是:762,中间一排是:459,后排的一组是:510 ,把以上三组字母按照顺序组合起来即可她会安排学习的。

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]

稍后我们会看到更多返回可迭代(对象)和以可迭代(对象)作为参数的函数。

4.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

(Yes, 这是正确的代码。看仔细:else 语句是属于 [for] 循环之中, 不是 [if] 语句。)

与循环一起使用时,else 子句与 
[try]语句的 else 子句比与 
[if] 语句的具有更多的共同点:
[try] 语句的 else 子句在未出现异常时运行,循环的 else 子句在未出现 break 时运行。
更多关于 [try]语句和异常的内容,请参见 [异常处理]。

[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

4.5. [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!
...

你要不要也来试试,用 Python 测测你和女神的颜值差距(仅供娱乐,请勿联想) 如果真的遇到好的同事,那算你走运,加油,抓紧学到手。

python、爬虫技巧资源分享添加围鑫(同音):762459510

包含python, pythonweb、爬虫、数据分析等Python技巧,以及人工智能、大数据、数据挖掘、自动化办公等的学习方法。

打造从零基础到项目开发上手实战全方位解析!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值