MicroPython 是一种适用于微控制器和其他受限环境的 Python 编程语言的实现。它旨在提供与 Python 3 语言的紧密兼容,同时考虑到内存和计算资源的限制。MicroPython 库是这门语言的核心组成部分,提供了一系列的模块和函数,使得开发者能够在硬件上执行各种任务。
下面将通过系列文章,逐一解读microPython,以便让读者了解掌握microPython的整个核心逻辑.,以便读者可以透过这个Python的最小内核,掌握Python解析器的核心实现逻辑,学习世界上最优秀的源码设计之一.
microPython Python最小内核源码解析
NI-motion运动控制c语言示例代码解析
python编程示例系列 python编程示例系列二
python的Web神器Streamlit
这段代码是MicroPython的一部分,用于定义通用迭代器对象。通用迭代器是一个可以迭代任何对象的迭代器,它的迭代行为由对象实例的 iternext
方法决定。如果启用了终结函数,迭代器还可以有一个 finaliser
方法,用于在迭代器被垃圾回收时执行一些清理工作。
#include <stdlib.h>
#include "py/runtime.h"
// 这是一个通用的迭代器类型,它调用存储在特定对象实例中的 "iternext" 方法。
// (因此,这种类型的对象实例可以有自己的迭代行为。)拥有这种类型可以避免为各种内部
// 迭代器对象定义类型对象。
// 任何实例都应该在开头具有这两个字段
typedef struct _mp_obj_polymorph_iter_t {
mp_obj_base_t base; // 基础对象,所有MicroPython对象都继承自这个结构体
mp_fun_1_t iternext; // 迭代下一个元素的方法
} mp_obj_polymorph_iter_t;
// 这个函数是一个包装器,它将调用传入对象的iternext方法
static mp_obj_t polymorph_it_iternext(mp_obj_t self_in) {
mp_obj_polymorph_iter_t *self = MP_OBJ_TO_PTR(self_in); // 将传入的对象转换为迭代器结构体指针
// 重定向调用到对象实例的iternext方法
return self->iternext(self_in);
}
// 定义一个常量对象类型,这个类型是一个通用迭代器
MP_DEFINE_CONST_OBJ_TYPE(
mp_type_polymorph_iter,
MP_QSTR("iterator"), // 字符串常量 "iterator" 表示这是一个迭代器
MP_TYPE_FLAG_ITER_IS_ITERNEXT, // 标记这个类型是一个迭代器
iter, polymorph_it_iternext // 迭代器的迭代方法
);
#if MICROPY_ENABLE_FINALISER
// mp_type_polymorph_iter_with_finaliser 是上面通用迭代器的变体,它附加了一个终结函数。
// 当垃圾回收器收集迭代器对象时,这个函数将被执行,可以用来关闭文件句柄等。
// 任何实例都应该在开头具有这三个字段
typedef struct _mp_obj_polymorph_iter_with_finaliser_t {
mp_obj_base_t base; // 基础对象
mp_fun_1_t iternext; // 迭代下一个元素的方法
mp_fun_1_t finaliser; // 终结函数
} mp_obj_polymorph_with_finaliser_iter_t;
// 这个函数是一个包装器,它将调用传入迭代器对象的终结方法
static mp_obj_t mp_obj_polymorph_iter_del(mp_obj_t self_in) {
mp_obj_polymorph_with_finaliser_iter_t *self = MP_OBJ_TO_PTR(self_in); // 转换对象为迭代器结构体指针
// 重定向调用到对象实例的终结方法
return self->finaliser(self_in);
}
// 定义一个函数对象,用于迭代器的删除操作
static MP_DEFINE_CONST_FUN_OBJ_1(mp_obj_polymorph_iter_del_obj, mp_obj_polymorph_iter_del);
// 定义一个本地字典,包含迭代器的特殊方法 __del__
static const mp_rom_map_elem_t mp_obj_polymorph_iter_locals_dict_table[] = {
{
MP_ROM_QSTR(MP_QSTR("__del__")), MP_ROM_PTR(&mp_obj_polymorph_iter_del_obj) }, // __del__ 方法的字典条目
};
static MP_DEFINE_CONST_DICT(mp_obj_polymorph_iter_locals_dict, mp_obj_polymorph_iter_locals_dict_table); // 定义本地字典
// 定义一个带有终结函数的通用迭代器类型
MP_DEFINE_CONST_OBJ_TYPE(
mp_type_polymorph_iter_with_finaliser,
MP_QSTR("iterator"), // 字符串常量 "iterator" 表示这是一个迭代器
MP_TYPE_FLAG_ITER_IS_ITERNEXT, // 标记这个类型是一个迭代器
iter, polymorph_it_iternext, // 迭代器的迭代方法
lo