Python 循环语句

python

Python 循环语句

  • 可迭代对象
    循环是针对可迭代对象的操作,可迭代对象指每次可以返回其中一个元素的对象,包括字符串、列表和元组等序列类型,字典和文件等非序列类型。可以使用迭代器生成器定义可迭代对象
  • 迭代变量
    迭代变量命名模式建议使用迭代变量和可迭代对象指定相同的名称,但是分别使用单复数形式(迭代变量使用单数,可迭代对象使用复数)

for 循环

for 循环用来遍历可迭代对象,如列表、字典,即使用迭代变量依次访问迭代对象中的元素,一般将其带入到缩进代码里进行处理。

for 循环是一种有限迭代,即循环主体的运行次数已提前定义好(对迭代对象中的每个元素运行主体一次)。

python
# iterable of cities
cities = ['new york city', 'mountain view', 'chicago', 'los angeles']

# for loop that iterates over the cities list
for city in cities:
    print(city.title())
Announce
  • 以关键字 for 开始
  • iteration_variable in iterable,其中 iterable 表示被遍历的是可迭代的对象literation_variable 表示迭代变量(即当前正在被处理的可迭代对象的元素),使用关键字 in 迭代变量从可迭代对象中取出元素
  • 以冒号 : 结尾

while 循环

定义

while 循环是一种无限迭代,即循环重复次数运行前未知(但并不是无法终止循环的「死循环」),并在满足某个条件时结束循环

python
card_deck = [4, 11, 8, 5, 13, 2, 8, 10]
hand = []

# adds the last element of the card_deck list to the hand list
# until the values in hand add up to 17 or more
# pop is the list method to remove the last element of it and get this element
while sum(hand) <= 17:
    hand.append(card_deck.pop())
Announce
  • 以关键字 while 开始
  • 后面是一个布尔表达式检查条件,根据布尔值是否为 true 决定是否运行循环主体
  • 以冒号 : 结尾
  • 每次进行循环前先要进行条件评估,为了避免进行「死」循环,需要在缩进主体中至少修改测试条件表达式中的一个变量

中断语句

控制何时循环应该结束,或者跳过某个迭代。使用关键字 breakcontinue 实现。

break 语句

break 语句使循环终止,跳出整个循环,执行下一行代码。

continue 语句

continue 语句跳过当前循环的这一次迭代,从头执行下一次循环

迭代器 literator

迭代器是一种表示数据流的对象,可使用生成器创建迭代器。

生成器 generator

生成器一般指生成器函数(也可指函数生成的迭代器对象,即迭代器),即使用函数创建迭代器

python
def my_range(x):
    # 生成器函数,生成一个从 0 到 x-1 的数字流
    i = 0
    while i < x:
        yield i
        i += 1
Warning
  • 关键字 yield(而非 return)使函数能够每一次返回一个值
  • 关键字 yield 使函数每次被调用时都从停下的位置继续
  • 关键字 yield生成器函数与普通函数区分开来

调用生成器函数

python
print(my_range(5))

🔨 编译结果

shell
# 打印出存储迭代器的内存地址
<generator object my_range at 0x111a2d938>

输出数据流的值使用for循环

python
for n in my_range(5):
    print(n)

🔨 编译结果

shell
0
1
2
3
4

对比

  • 可迭代对象(如列表),是可迭代(每次取出一个元素)但不是数据流
  • 迭代器则是一个数据流对象

生成器的优点

生成器是构建迭代器的「懒惰」方式。当内存不够存储完整实现的列表时,或者计算每个列表元素的代价很高,你希望尽量推迟计算时,就可以使用生成器。但是这些元素只能遍历一次。

摘自 https://softwareengineering.stackexchange.com/questions/290231/when-should-i-use-a-generator-and-when-a-list-in-python/290235

由于使用生成器是一次处理一个数据,在内存和存储的需求上会比使用列表 list 等方式,直接全部生成再存储,节省很多资源。

摘自 https://softwareengineering.stackexchange.com/questions/273551/should-i-prefer-python-generators-to-lists


Copyright © 2025 Ben

Theme BlogiNote

Icons from Icônes