前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MicroPython 标准微库解读.1

MicroPython 标准微库解读.1

作者头像
云深无际
发布2021-11-12 18:34:43
8700
发布2021-11-12 18:34:43
举报
文章被收录于专栏:云深之无迹云深之无迹

microPython学起来语法倒是很容易,只是它本身有很多的库,需要研究一下。

整个mpy其实是标准微库+特定芯片外设库。所以我们先看标准的微库。

代码语言:javascript
复制
https://docs.micropython.org/en/latest/library/index.html#python-standard-libraries-and-micro-libraries

先放一下文档的地址,我们看源码是一方面

读这份官方的文档是另一方面

按照顺序,一开始就是标准的微库,这里的意思是说所有的板子都可以使用

但是嵌入式这种东西,也难免资源的原因不可能全部给你支持:

代码语言:javascript
复制
help('modules')

你可以使用help查看模块的帮助

在正式的说库之前,需要插一下下面这个东西:

代码语言:javascript
复制
https://github.com/micropython/micropython-lib

这个库里面放着这些东西

代码语言:javascript
复制
MicroPython 特定的库
==============================

这些是专门为在 MicroPython 上使用而编写的库。

在某些情况下,这些库的灵感来自或基于等效的 CPython 标准库,但兼容性各不相同。这些库通常以“u”前缀命名。

其他库是专门为 MicroPython 用例编写的。

未来的计划
------------

* 基于库用途(例如驱动程序、网络等)的更有组织的目录结构

看了看呐,没啥用嗷

接下来看我们的标准微库:

图稍微放的大一点

这是mpy的特定微库

看到硬件相关的功能库没有:

就是这个

在lib库的这里

先看一个例子:

代码语言:javascript
复制
import utime
from machine import Timer


t1 = Timer(0, 10)
t2 = Timer(1, 3)
t1.callback(lambda t: print(t, "tick1"))
t2.callback(lambda t: print(t, "tick2"))

utime.sleep(3)
print("done")

看源码来说,其实是对文件或者文件目录的操作

但是看完再ffi的unix目录里面,这个结果不稀奇

因为unix哲学就是万物皆文件

这是时间库,我其实觉得这个源码可能不是我看的

因为文档里面的方法在这里面都没有体现

代码语言:javascript
复制
https://github.com/micropython/micropython

应该是底层这些使用C写,包装了上层的Python接口

啰嗦完了,看提供的方法:

列表作为Python中一种主要的数据结构,一定会被支持

两个方法,一个一个的加,一串串加

进制之间的转换

遵循下面这个规定:

Base64 内容传输编码旨在表示不需要人为的形式的任意八位字节序列可读。编码和解码算法很简单,但是编码数据始终仅比编码数据大约 33%未编码的数据。这种编码实际上与使用的相同在RFC 1421 中定义的隐私增强邮件 (PEM) 应用程序中。

使用了一个 65 个字符的 US-ASCII 子集,使 6 位成为可能每个可打印字符表示。(额外的第 65 个字符,“=”,用于表示特殊的处理功能。)

注意:这个子集有一个重要的特性,它被表示在所有版本的 ISO 646 中都相同,包括 US-ASCII,以及所有子集中的字符也以相同的方式表示EBCDIC 版本。其他流行的编码,例如编码由 uuencode 实用程序 Macintosh binhex 4.0 [ RFC-1741 ] 使用,以及指定为 Level 2 PostScript 一部分的 base85 编码,不要共享这些属性,因此不满足可移植性邮件的二进制传输编码必须满足的要求。

编码过程将 24 位的输入位组表示为输出4 个编码字符的字符串。从左到右,a24 位输入组由 3 个 8 位输入组串联而成。然后将这 24 位视为 4 个串联的 6 位组,每个组其中被翻译成base64字母表中的一个数字。通过 base64 编码对位流进行编码时,位流必须假定以最高有效位在前进行排序。也就是说,流中的第一位将是第一个 8bit 字节,第 8 位将是第一个 8 位字节,依此类推。

每个 6 位组用作 64 个可打印数组的索引人物。索引引用的字符放在输出字符串。下表 1 中确定的这些字符是被选择为普遍可表示的,并且该集合不包括对 SMTP 具有特殊意义的字符(例如,“.”、CR、LF)以及RFC 2046 中定义的多部分边界分隔符(例如,“-”)。

这翻译,也不知道你能不能看的懂。

代码语言:javascript
复制
https://datatracker.ietf.org/doc/html/rfc2045#section-6.

Cmath模块,ESP8266上面不可以用,因为没有浮点模块

注意这个模块是复数模块

代码语言:javascript
复制
https://docs.python.org/zh-cn/3.5/library/cmath.html#module-cmath

具体的可以看3.5.10这个文档,因为mpy指向了这里

双端队列

Deque队列是由栈或者queue队列生成的(发音是 “deck”,”double-ended queue”的简称)。Deque 支持线程安全,内存高效添加(append)和弹出(pop),从两端都可以,两个方向的大概开销都是 O(1) 复杂度。

命名元组

命名元组赋予每个位置一个含义,提供可读性和自文档性。它们可以用于任何普通元组,并添加了通过名字获取值的能力,通过索引值也是可以的。

记住插入顺序的字典

返回一个 dict 子类的实例,支持常用的dict 方法。一个OrderedDict是记住的键首先被插入的顺序的字典。如果新条目覆盖现有条目,则原始插入位置保持不变。删除一个条目并重新插入它会将它移到最后。

集合类型实现了三个,第一个双端队列有点好用

代码语言:javascript
复制
https://docs.python.org/3.5/library/collections.html#module-collections

具体看这里

这是我们完整的Python实现,上面实现个子集

自带的库,和官网的文档真的是非常好的资料,如果你有时间,亲自看看,操作一下,受益匪浅。

错误常数代码

写程序难免出错,程序会抛出错误类型,这个具体的定义米可以看源码,也可以去看标准的错误定义

Python出名的原因,有很多就是他的动态性和后台无感的垃圾回收

针对这个搭配的模块是gc,mpy实现了一些功能,也因地制宜的进行了扩展

散列函数的性能好,这里也做了实现

分别是构造方法和操作方法

堆队列本质上是一个列表,它的元素以列表的第一项总是最小的方式存储。

而且也是个二叉树

方法

代码语言:javascript
复制
https://docs.python.org/3.5/library/heapq.html#module-heapq

如果继续罗列,其实是没有意思的。那下篇文章将会使用标准的Python库使用一些这些模块。

啾咪

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-03,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com