当前位置: 首页 > news >正文

Python学习笔记——控制流

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将输入视为数值。

相关文章:

  • 论文中参考文献对不上/东莞做网站排名优化推广
  • 定制网站的优势/常见的搜索引擎有哪些
  • 在线做logo印章网站/济南网站优化
  • 山东高端网站建设/seo网站优化技术
  • 如何做英文网站/seo推广优化平台
  • 给个网站能看的/新闻头条今日新闻下载
  • AtCoder Beginner Contest 285解题报告
  • 【机器学习之模型融合】Blending混合法
  • 设计模式学习(七):Factory Method工厂模式
  • nn.Conv1d、nn.Conv2d、nn.Linear
  • 《Linux Shell脚本攻略》学习笔记-第九章
  • 【学习笔记】【Pytorch】、损失函数与反向传播
  • linux基本功系列之useradd命令实战
  • 《上海市服务业发展引导资金使用和管理办法》沪府规〔2022〕22号
  • SLS:基于 OTel 的移动端全链路 Trace 建设思考和实践
  • IB地理课选课指南,SL还是HL适合呢?
  • 简单工厂模式(simple-factory-model)
  • 图片怎么转jpg?教你两个超简单的图片转jpg格式的方法