【发布时间】:2020-05-13 18:05:24
【问题描述】:
大多数 Micropython 端口都包含一个“micropython”模块,该模块具有一个名为“const()”的特定函数。我被引导相信它的行为很像 C 中的 '#define',但是,它只接受整数。有人知道为什么吗?你可以在 C 中声明浮点常量,那为什么在 micropython 中不可用呢?
我想有效地存储用于在单位之间转换的值,但其中许多是浮点值...(我考虑将它们乘以 10^x,然后在运行时除以它,但这很可能只需将浮点数存储在变量中并让代码使用查找表)。
知道为什么我们只能用micropython.const() 声明整数吗?
干杯:)
【问题讨论】:
-
“它的行为很像 C 中的 '#define'”
#define是一个预处理器命令,因此工作方式完全不同。 -
@KlausD.:MicroPython 的
const被 MicroPython 编译器识别,因此它的行为更像#define,而不是你在 CPython 中可以做的任何事情。您不能做任何复杂的宏操作,但const值将直接替换到它们的使用位置(至少在一个模块内),并且非导出的consts 不需要存储位置。跨度> -
啊,好的,谢谢@user2357112supportsMonica 和 KlausD,我了解预处理器命令并看到使用上的细微差别。缺乏浮点支持是否可能与整数和浮点数的不同空间要求有关?
-
MicroPython 只接受
const的所谓“小整数”; “大”整数(即不适合机器字的整数减去一些位)和浮点值需要在堆上分配。const替换等在我认为解析时完成,然后再编译。至于您的实际问题,即为什么这不适用于堆分配的对象:我想从技术上讲这是可能的,但它可能太难了,不确定..
标签: python constants micropython