欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

控制语句

程序员文章站 2022-06-15 14:55:48
...

条件控制

选择结构 选择结构通过判断条件是否成立,来决定执行哪个分支。选择结构有多种形式,分为:单分 支、双分支、多分支。
单分支选择结构 if 语句单分支结构的语法形式如下:
if 条件表达式: 语句/语句块 其中:

  • 1 .条件表达式:可以是逻辑表达式、关系表达式、算术表达式等等。
  • 2 .语句/语句块:可以是一条语句,也可以是多条语句。多条语句,缩进必须对齐一致。

条件表达式详解
在选择和循环结构中,条件表达式的值为 False 的情况如下: False、0、0.0、空值 None、空序列对象(空列表、空元祖、空集合、空字典、空字 符串)、空 range 对象、空迭代对象。 其他情况,均为 True。这么看来,Python 所有的合法表达式都可以看做条件表达式,甚至 包括函数调用的表达式
条件表达式中,不能有赋值操作符“=”
在 Python 中,条件表达式不能出现赋值操作符“=”,避免了其他语言中经常误将关系运 算符“==”写作赋值运算符“=”带来的困扰。

双分支选择结构
双分支结构的语法格式如下:

if 条件表达式 : 
	语句 1/语句块 1 
else:
	语句 2/语句块 2 

三元条件运算符
Python 提供了三元运算符,用来在某些简单双分支赋值情况。三元条件运算符语法格式如 下: 条件为真时的值 if (条件表达式) else 条件为假时的值
多分支选择结构
多分支选择结构的语法格式如下:

if 条件表达式 1 : 
	语句 1/语句块 1 
elif 条件表达式 2: 
	语句 2/语句块 2 
...
elif 条件表达式 n : 
	语句 n/语句块 n 
else:
	语句 n+1/语句块 n+1 

选择结构嵌套
选择结构可以嵌套,使用时一定要注意控制好不同级别代码块的缩进量,因为缩进量决定了 代码的从属关系。

循环结构

循环结构用来重复执行一条或多条语句。表达这样的逻辑:如果符合条件,则反 复执行循环体里的语句。在每次执行完后都会判断一次条件是否为 True,如果 为 True 则重复执行循环体里的语句。图示如下:
控制语句
while 循环
while 循环的语法格式如下:

while 条件表达式:   
    循环体语句 

for 循环和可迭代对象遍历
for 循环通常用于可迭代对象的遍历。for 循环的语法格式如下:

 for 变量 in 可迭代对象: 
 	循环体语句 

可迭代对象 Python 包含以下几种可迭代对象:

  1. 序列。包含:字符串、列表、元组
  2. 字典
  3. 迭代器对象(iterator)
  4. 生成器函数(generator)
  5. 文件对象
    range 对象
    range 对象是一个迭代器对象,用来产生指定范围的数字序列。
    格式为: range(start, end [,step]) 生成的数值序列从 start 开始到 end 结束(不包含 end)。
    若没有填写 start,则默认从 0 开始。step 是可选的步长,默认为 1。
    如下是几种典型示例:
for i in range(10) 产生序列:0 1 2 3 4 5 6 7 8 9 
for i in range(3,10) 产生序列:3 4 5 6 7 8 9 
for i in range(3,10,2) 产生序列:3 5 7 9

嵌套循环
一个循环体内可以嵌入另一个循环,一般称为“嵌套循环”,或者“多重循环”
break 语句
break 语句可用于 while 和 for 循环,用来结束整个循环。当有嵌套循环时,break 语句只 能跳出最近一层的循环。
continue 语句
continue 语句用于结束本次循环,继续下一次。多个循环嵌套时,continue 也是应用于最 近的一层循环。
else 语句
while、for 循环可以附带一个 else 语句(可选)。如果 for、while 语句没有被 break 语句 结束,则会执行 else 子句,否则不执行。
语法格式如下:

while 条件表达式: 
	循环体 
else:
	语句块
for 变量 in 可迭代对象: 
	循环体 
else:
	语句块 

循环代码优化

虽然计算机越来越快,空间也越来越大,我们仍然要在性能问题上“斤斤计较”。编写循环时,遵守下面三个原则可以大大提高运行效率,避免不必要的低效计算:

  1. 尽量减少循环内部不必要的计算
  2. 嵌套循环中,尽量减少内层循环的计算,尽可能向外提。
  3. 局部变量查询较快,尽量使用局部变量。

其他优化手段

  1. 连接多个字符串,使用 join()而不使用+
  2. 列表进行元素插入和删除,尽量在列表尾部操作

使用 zip()并行迭代

我们可以通过 zip()函数对多个序列进行并行迭代,zip()函数在最短序列“用完”时就会停
止。

推导式创建序列

推导式是从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合, 从而避免冗长的代码。推导式是典型的 Python 风格,会使用它代表你已经超过 Python 初 学者的水平。

列表推导式

列表推导式生成列表对象,语法如下:

[表达式 for item in 可迭代对象 ] 或者:{表达式 for item in 可迭代对象 if 条件判断}

字典推导式

字典的推导式生成字典对象,格式如下:

  {key_expression : value_expression for 表达式 in 可迭代对象}

集合推导式

集合推导式生成集合,和列表推导式的语法格式类似:

 {表达式 for item in 可迭代对象 } 或者:{表达式 for item in 可迭代对象 if 条件判断}

Python3 迭代器与生成器

迭代器
迭代是Python最强大的功能之一,是访问集合元素的一种方式。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和 next()。

>>> list=[1,2,3,4]
>>> it = iter(list)    # 创建迭代器对象
>>> print (next(it))   # 输出迭代器的下一个元素
1
>>> print (next(it))
2
>>>

创建一个迭代器
把一个类作为一个迭代器使用需要在类中实现两个方法 iter() 与 next() 。
如果你已经了解的面向对象编程,就知道类都有一个构造函数,Python 的构造函数为 init(), 它会在对象初始化的时候执行。
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))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))

执行输出结果为:

1
2
3
4
5

StopIteration
StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 next() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。

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)

执行输出结果为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

生成器
在 Python 中,使用了 yield 的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
调用一个生成器函数,返回的是一个迭代器对象。

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()

执行以上程序,输出结果如下:

0 1 1 2 3 5 8 13 21 34 55

具体的关于参考:Python yield 使用浅析

相关标签: 人工智能