第2章:控制流程:深入浅出 Python 循环语句

技术百科 admin 发布时间:2024-04-24 浏览:5 次

点击上方“Python学习开发”,选择“加为星标

第一时间关注Python技术干货!

Python 3 作为一门动态、解释型的高级编程语言,以其简洁明了的语法和强大的功能库而广受欢迎。在最新版的Python 3中,循环语句是控制程序流程的重要结构之一,主要包括 for 循环和 while 循环。本文将对这两种循环语句进行梳理,帮助你更好地理解和使用它们。

for 循环

for 循环在Python中用于遍历序列(如列表、元组、字符串)或其他可迭代对象。其基本语法结构如下:

for item in

 iterable:

    # 代码块

这里的 iterable 可以是任何可迭代对象,而 item 是在每次迭代中从 iterable 中取得的元素。for 循环会自动处理迭代器的创建和遍历过程,使得开发者可以专注于处理每个元素。

示例# 遍历列表fruits = [applebananacherry

]

for fruit in

 fruits:

    print(fruit)

# 遍历字符串for char in "hello"

:

    print(char)

while 循环

while 循环则用于在条件为真时重复执行代码块。其基本语法结构如下:

while

 condition:

    # 代码块

这里的 condition 是一个布尔表达式,如果其值为 True,则执行循环体内的代码块;当 condition 变为 False 时,循环结束。

示例# 计数器counter = 0while counter < 5

:

    print(counter)

    counter += 1# 使用条件表达式condition = Truewhile

 condition:

    print("Looping..."

)

    condition = False  # 改变条件以退出循环

循环控制语句

除了基本的 for 和 while 循环,Python 还提供了 break 和 continue 语句来更细致地控制循环的行为。

break 语句用于立即退出循环。continue 语句用于跳过当前迭代的剩余部分,并开始下一次迭代。示例# 使用 break 退出循环for i in range(10

):

    if i == 5

:

        break

    print(i)

# 使用 continue 跳过迭代for i in range(10

):

    if i % 2 == 0

:

        continue

    print(i)

高级部分

对于循环语句(for和while),CPython的字节码和指令集提供了特定的操作码(opcodes)来处理循环的逻辑。以下是一些与循环相关的CPython字节码指令:

for循环的字节码实现

在CPython中,for循环通常转换为FOR_ITER和FOR_LOOP指令。FOR_ITER用于初始化循环,而FOR_LOOP用于执行循环体。

for item in

 sequence:

    # 循环体

这段Python代码会被编译为以下字节码(以Python 3.8为例):

  0 LOAD_GLOBAL              0 (sequence)

  3 GET_ITER                 // 获取迭代器

  6 FOR_ITER                // 准备进入循环

  9 SETUP_LOOP              1 (到标签 10)

 12 LOAD_FAST                0 (item)

 14 STORE_FAST               1 (item)

 17 JUMP_ABSOLUTE            9 (跳转到标签 9)

 20 POP_BLOCK               // 清理循环栈

 23 LOAD_CONST               1 (None)

 26 RETURN_VALUE

这里的SETUP_LOOP指令设置了一个循环的开始,JUMP_ABSOLUTE用于无条件跳转回循环的开始点,以便继续迭代。当迭代器耗尽时,会抛出StopIteration异常,循环结束。

while循环的字节码实现

while循环在CPython中通常转换为SETUP_LOOP和JUMP_IF_TRUE_OR_POP指令。

while

 condition:

    # 循环体

这段Python代码会被编译为以下字节码:

  0 LOAD_GLOBAL              0 (condition)

  3 JUMP_IF_FALSE           10 (到标签 10,如果条件为假)

  6 JUMP_ABSOLUTE            0 (无条件跳转回循环开始)

  9 POP_BLOCK                // 清理循环栈

 12 LOAD_CONST               1 (None)

 15 RETURN_VALUE

在这里,JUMP_IF_FALSE指令用于检查条件是否为假,如果为假则跳转到标签10,退出循环。如果条件为真,则继续执行循环体。POP_BLOCK指令用于在退出循环时清理栈上的循环状态。

需要注意的是,上述字节码示例是基于特定版本的Python解释器。随着Python版本的更新,字节码指令集可能会有所变化。要查看特定版本的字节码指令集,可以参考CPython的官方文档或使用Python的dis模块来反汇编和分析字节码。

高级部分Cpython中的实现

以下是关于for和while循环在CPython中实现的一些具体细节。

for循环的实现

for循环在Python中通常用于遍历序列或迭代器。在CPython的实现中,for循环的关键在于迭代器协议的实现。迭代器是一个包含__next__和__iter__方法的对象,它们分别用于获取下一个元素和创建迭代器。

当Python代码执行for循环时,以下步骤在CPython的C语言层面发生:

获取迭代器:for循环首先调用可迭代对象的__iter__方法来获取一个迭代器对象。循环迭代:在循环体内部,通过调用迭代器的__next__方法来获取序列中的下一个元素。如果序列中没有更多元素,__next__方法将抛出一个StopIteration异常,该异常在Python层被捕获,从而结束循环。

以下是CPython中for循环的一个简化实现示例:

PyObject *

PyFor_Iterate(PyObject *seq)

{

    PyObject *iterator = PyObject_GetIter(seq);

    if (iterator == NULL

) {

        return NULL

;

    }

    while (1

) {

        PyObject *item = PyIter_Next(iterator);

        if (item == NULL

) {

            if

 (PyErr_Occurred()) {

                Py_DECREF(iterator);

                return NULL

;

            }

            break;  // No more items, exit loop

        }

        // Execute the loop body with the item        // ...

        Py_DECREF(item);

    }

    Py_DECREF(iterator);

    Py_RETURN_NONE;

}

while循环的实现

while循环在Python中用于重复执行代码块,直到给定的条件不再为真。在CPython中,while循环的实现依赖于条件表达式的求值。

当Python代码执行while循环时,以下步骤在CPython的C语言层面发生:

条件评估:在每次循环迭代开始时,while循环的条件表达式被求值。执行循环体:如果条件为真(非零),则执行循环体内的代码。循环继续:循环结束后,再次评估条件表达式,如此往复直到条件为假。

以下是CPython中while循环的一个简化实现示例:

PyObject *

PyWhile_Loop(PyObject *condition, PyObject *block)

{

    while

 (PyObject_IsTrue(condition)) {

        if (block == NULL

) {

            return NULL

;

        }

        // Execute the loop block        // ...        // Check for and handle exceptions        // ...        if

 (PyErr_Occurred()) {

            return NULL

;

        }

    }

    Py_RETURN_NONE;

}

在这两个示例中,我们可以看到CPython如何通过C语言的函数和对象模型来实现Python的高级循环结构。这些实现细节展示了CPython如何将Python代码转换为高效的机器代码执行。

推荐阅读

第2章:控制流程:深入探究 Python 条件语句

第1章:Python基础:标准输入和输出

在线咨询

点击这里给我发消息售前咨询专员

点击这里给我发消息售后服务专员

在线咨询

免费通话

24h咨询:400-888-8888


如您有问题,可以咨询我们的24H咨询电话!

免费通话

微信扫一扫

微信联系
返回顶部