你平常Python中有用哪些常用的内置模块啊?,python模块扩展名
Micro Python II内部模块概述。添加自定义模块1。新类型的定义2。新模块的定义。体验三。摘要
本文介绍了mp内部模块的实现,如何定制内部模块,供对python编译器内部实现感兴趣的读者使用。要求:只需要有python应用经验即可。
发表在《Micropython开发:内部模块的定义和扩展》中
Micropython需要支持导入模块,同时设备驱动必须能够以python模块的形式工作,所以这个接口必须用python解释来实现。外部模块的定义位于$(tree)/extmod中。该模块被命名为modxxx.c.比如modframebuf.c
微python内部模块概述所有Python全局模块都是从static constmp _ rom _ map _ elem _ tmp _ builtin _ module _ table[]中查找的,这个查找表位于py/objmodule.c
下面列出一些模块供参考,并详细描述参考模块的实现。
模块名称函数描述mp_module_thread多线程支持mp_module_gc垃圾收集mp_module_syspython的sys模块,提供系统操作接口mp_module_math数学运算模块mp_module_array向量运算mp_module_ujsonjson支持mp_module_websocketsocket支持MP _ module _ framebuf驱动模块这些全局模块的价值在于
扩展mp功能为添加新模块提供参考。二。添加自定义模块。以framebuf模块的定义为例,介绍如何添加新的内置模块。
2.1新类型静态常量MP _ obj _ type _ t MP _ type _ frame buf={ { MP _ type _ type }的定义。name=MP _ qstr _ framebuffer,make _ new=framebuf _ make _ new,buffer_p={。get _ buffer=frame buf _ get _ buffer },locals _ dict=(MP _ obj _ t)frame buf _ locals _ dict,};以平时写的python程序为例。当它作为一个模块导入时,每个模块不仅包含一些操作界面,还包含一个新类型的定义。新的类型由编译器内部的这个结构表示。
2.2新模块的定义注意:模块包含类型
const MP _ obj _ module _ t MP _ module _ frame buf={。base={ mp_type_module },globals=(MP _ obj _ dict _ t *)frame buf _ module _ globals,};定义一个mp_obj_module_t类型的变量,其中只有两个成员:存储模块对象的基址和模块的符号表。
2.3体验在mpconfigport.h中定义
#define MICROPY_PY_FRAMEBUF (1)可编译。启动后
Import framebuf #导入模块framebuf.tab #查看模块属性framebuf。_ _ name _ _ frame buffer frame buffer 1 mvlsbrgb 565此处的属性是framebuf_module_globals中的成员。
w=5h=16 buf=bytearray(w * h//8)fbuf=frame buf。FrameBuffer(buf,w,h,me buf . mv LSB)fbuf . fill fill _ rect pixel hline vline rect line blit scroll text fbuf . fbuf frame buffer。因此,创建了framebuffer类型的对象fbuf,并且可以看到fbuf对象的属性。
fbuf属性列表是framebuf _ locales _ dict中的内容,这里进一步展示以供参考。
静态MP _ DEFINE _ CONST _ FUN _ OBJ _ VAR _ BETWEEN(frame buf _ text _ obj,4,5,frame buf _ text);静态常量MP _ ROM _ map _ elem _ t frame buf _ locals _ dict _ table[]={ { MP_ROM _ QSTR(MP _ QSTR _ fill),MP_ROM_PTR(framebuf_fill_obj) },{ MP_ROM_QSTR(MP_QSTR_fill_rect),MP _ ROM _ PTR(frame buf _ fill _ rect _ obj)},{ MP_ROM_QSTR(MP_QSTR_pixel),MP _ ROM _ PTR(frame buf _ pixel _ obj)},{ MP _ ROM属性名为MP_QSTR_name,属性对象指向MP_ROM_PTR(obj)定义的内容,obj通过static MP _ define _ const _ fun _ obj _ var _ between(frame buf _ text _ obj,4,5,frame buf _ text);定义。
所有属性对象的处理函数的形状如下
static MP _ obj _ t func _ name(size _ t n _ args,constmp _ obj _ t * args)的形式。
总结上面的经验,我们可以感觉到,添加自己的模块非常简单,只需要定义一系列的属性就可以了。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。