Python学习笔记——控制流
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
Python 中的控制流要包含 if、for、while循环
条件控制
if语句是最常用的条件控制语句关键字有if、elif、else。
if 条件一
statements!
elif 条件二
statements 2
else:
statements3
注意
1、每个条件后面要使用冒号 :表示接下来是满足条件后要执行的语句块。
2、使用缩进来划分语句块相同缩进数的语句在一起组成一个语句块。
if 嵌套
在嵌套 if 语句中可以把 if...elif...else 结构放在另外一个 if...elif...else 结构中。
match...case
Python 3.10 增加了 match...case 的条件判断不需要再使用一连串的 if-else 来判断了。
match 后的对象会依次与 case 后的内容进行匹配如果匹配成功则执行匹配到的表达式否则直接跳过_ 可以匹配一切。
match subject:
case <pattern_1>:
<action_1>
case <pattern_2>:
<action_2>
case <pattern_3>:
<action_3>
case _:
<action_wildcard>
case _: 类似于 C 和 Java 中的 default:当其他 case 都无法匹配时匹配这条保证永远会匹配成功。
一个 case 也可以设置多个匹配条件条件使用 | 隔开例如case 401|403|404:
循环语句
while 循环
语句的形式为
while 条件一
statementsl
我们可以通过设置条件表达式永远不为 false 来实现无限循环
while 循环使用 else 语句
如果 while 后面的条件语句为 false 时则执行 else 的语句块。
语法格式如下
#expr 条件语句为 true 则执行 statement(s) 语句块如果为 false则执行 additional_statement(s)。
while <expr>:
<statement(s)>
else:
<additional_statement(s)>
简单语句组
类似 if 语句的语法如果你的 while 循环体中只有一条语句你可以将该语句与 while 写在同一行中
for 语句
for 循环可以遍历任何可迭代对象如一个列表或者一个字符串。
for循环的一般格式如下
for <variable> in <sequence>:
<statements>
else:
<statements>
for...else
在 Python 中for...else 语句用于在循环结束后执行一段代码。
语法格式如下
for item in iterable:
# 循环主体
else:
# 循环结束后执行的代码
当循环执行完毕即遍历完 iterable 中的所有元素后会执行 else 子句中的代码如果在循环过程中遇到了 break 语句则会中断循环此时不会执行 else 子句。
在for循环中使用切片
如果在循环体内执行语句对for后面的序列数据进行了修改这会影响到for语句的初始循环次数。
words=['I', 'love','Python'] #定义一个列表
for item in words [ :] : #for后面没有使用words而是使用了切片作为words的副本
words.insert(O , item) #向words里插入一个元素
print(item) #打印item三次迭代分别输出I,love,Python
print(words) #打印整个words输出[’Python’,'love’,'I','I','love','Python']
内置函数range
range的意思是返回一个数字区间的所有整数。
range中的参数默认是从0开始。
range函数中还可以有第三个参数一一步长。即从起始到结束每隔“步长个数字”返回一次。
内置函数zip
for语句还可以配合内置函数zip以同时遍历多个序列。
zip函数可以将任意多的“序列”类型数据结合起来生成新序列数据。生成的新序列数据中每个元素都是一个元组。该元组的元素是由传入zip函数中的多个序列数据的元素组成。
x=[l, 2, 3) #定义俩个列表x与y
y=[3 , 2 ,"hello"]
t = zip(x , y) #通过zip生成一个新的序列t这时t是zip类型
print (tuple(t)) #将t转成元组并打印。输出((1 , 3) , (2, 2), (3, ‘hello'))
需要注的是当zip对象t被转化为元组或列表后就会自动销毁。如果再使用t将得不到具体的元素。
x=[l,2,3] #定义俩个列表x与y
y=[3,2 ,"hello" ]
t = zip(x , y) # 通过zip生成一个新的序列t这时t是zip类型
print(list(t)) #将t转成列表并打印输出[(1 , 3) , (2, 2), (3, ‘hello')]
print(tuple(t)) #再次将t转成元组得到的是空数组输出()
zip对象还可以通过前面加个字符“*”的方式来完成unzip的过程所谓unzip就是将zip生成的数据返回。
x=[l,2,3] #定义俩个列表x与y
y=[3,2 ,"hello" ]
t = zip(x , y) # 通过zip生成一个新的序列t这时t是zip类型
print(*) #在t面加一个*完成unzip。输出(1 , 3) (2, 2) (3, 'hello')
print(*) #同样t只能unzip一次再次使用时会返回空位。没任何输出
如果zip里面的序列长度不同就会以最短的序列数据为主。
内置函数enumerate
enumerate函数的作用是将“序列”类型的数据生成带序号的新序列数据。
使用enumerate生成的新序列中每个元素都是一个元组该元组是由传入enumerate函数中序列的元素与其对应的索引组成的。
x =[ "hello", 5, 6] #定义l个列表x
t = enumerate(x) #通过enumerate生成一个新的序列t这时t是enumerate类型
print(tuple(t)) #将t转成元组并打印输出((0,'hello'), ( 1, 5) , (2 , 6))
#for循环中需要定义两个变量来接收enumerate后的返回值一个是元素的索引一个是具体的元素。
for i , t2 in enumerate(x): #循环边历enumerate后的x
print(i , t2) #将i、t2打印出来
#输出
0 hello
1 5
2 6
enumerate与for的结合为程序提供了更大的方便性。enumerate的第一个返回值在循环里同时也起到计数的作用可以直接当作循环的次数来使用。
循环控制
break 语句可以跳出 for 和 while 的循环体。如果你从 for 或 while 循环中终止任何对应的循环 else 块将不执行。
continue 语句被用来告诉 Python 跳过当前循环块中的剩余语句然后继续进行下一轮循环。
pass该语句什么都不做是为了保持程序结构的完整性。常用在语法上需要一条语句但又不需要任何操作的情况下。
迭代器
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法iter() 和 next()。
字符串列表或元组对象都可用于创建迭代器
#!/usr/bin/python3
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
for x in it:
print (x, end=" ")
import sys # 引入 sys 模块
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
while True:
try:
print (next(it)) #使用 next() 函数
except StopIteration:
sys.exit()
创建一个迭代器
把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__() 。
__iter__() 方法返回一个特殊的迭代器对象 这个迭代器对象实现了 __next__() 方法并通过 StopIteration 异常标识迭代的完成。
__next__() 方法Python 2 里是 next()会返回下一个迭代器对象。
创建一个返回数字的迭代器初始值为 1逐步递增 1
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
StopIteration
StopIteration 异常用于标识迭代的完成防止出现无限循环的情况在 __next__() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。
在 20 次迭代后停止执行
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)
生成器
在 Python 中使用了 yield 的函数被称为生成器generator。
跟普通函数不同的是生成器是一个返回迭代器的函数只能用于迭代操作。
在调用生成器运行的过程中每次遇到 yield 时函数会暂停并保存当前所有的运行信息返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
调用一个生成器函数返回的是一个迭代器对象。
#!/usr/bin/python3
import sys
def fibonacci(n): # 生成器函数 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一个迭代器由生成器返回生成
while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()
函数 input()
函数 input() 让程序暂停运行等待用户输入一些文本。获取用户输入后Python将其存储在
一个变量中以方便你使用。
使用函数 input() 时Python将用户输入解读为字符串。可使用函数 int() 它让Python将输入视为数值。