3912|4

1万

帖子

25

TA的资源

版主

楼主
 

【MicroPython】定义常数 [复制链接]

 
本帖最后由 dcexpert 于 2016-5-4 21:23 编辑

在python中没有象C语言那样的const关键字,不能直接定义常数,只能通过一些其他方式来模拟常量的用法。

在MicroPython中,做出了一些改进,让我们可以这样使用常数,下面是nRF24L01+程序的用法:

  1. # nRF24L01+ registers
  2. CONFIG      = const(0x00)
  3. EN_RXADDR   = const(0x02)
  4. SETUP_AW    = const(0x03)
  5. SETUP_RETR  = const(0x04)
  6. RF_CH       = const(0x05)
  7. RF_SETUP    = const(0x06)
  8. STATUS      = const(0x07)
  9. RX_ADDR_P0  = const(0x0a)
  10. TX_ADDR     = const(0x10)
  11. RX_PW_P0    = const(0x11)
  12. FIFO_STATUS = const(0x17)
  13. DYNPD            = const(0x1c)
复制代码

这样使用起来和C语言的用法很类似了。不过,这其实只是一个假象,因为这里定义const还是可以修改的。



最新回复

本帖最后由 allankliu 于 2016-5-6 12:10 编辑 这个一般作为一个内部类存在。源码来源是Python Cookbook,2nd Edition 不知道为何处语法错误,Python2/3在这里有区别么?或者您在flash中试试看?我在Python2.7桌面版里一直这么用。 使用的时候, import const const.myconst = 3.1415926 我会切到Python3和uPython中看一看。  详情 回复 发表于 2016-5-6 12:08
点赞 关注
 
 

回复
举报

111

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
作为动态语言,python里都是对象。也总有可修改的方法。可以试试看这个方法:

  1. class _const:
  2.     class ConstError(TypeError): pass
  3.     def __setattr__(self, name, value):
  4.         if self.__dict__.has_key(name):
  5.             raise self.ConstError, "Can't rebind const (%s)" %name
  6.         self.__dic__[name]=value

  7. import sys
  8. sys.module[__name__]=_const()
复制代码


这个在Python2.7是可行的。实现方式是将对象的修改方法中抛出异常,不允许修改。

你可以在micropython中试试看。

点评

提示第5行有错误。 >>> class _const: ... class ConstError(TypeError): pass ... def __setattr__(self, name, value): ... if self.__dict__.has_key(name): ... raise self.  详情 回复 发表于 2016-5-6 11:35
 
 
 

回复

1万

帖子

25

TA的资源

版主

板凳
 
allankliu 发表于 2016-5-6 11:02
作为动态语言,python里都是对象。也总有可修改的方法。可以试试看这个方法:



这个在Python2.7是可 ...

提示第5行有错误。

>>> class _const:
...     class ConstError(TypeError): pass
...     def __setattr__(self, name, value):
...         if self.__dict__.has_key(name):
...             raise self.ConstError, "Can't rebind const (%s)" %name
...         self.__dic__[name]=value
...
Traceback (most recent call last):
  File "", line 5
SyntaxError: invalid syntax
>>>
 
 
 

回复

111

帖子

0

TA的资源

一粒金砂(高级)

4
 
本帖最后由 allankliu 于 2016-5-6 12:10 编辑

这个一般作为一个内部类存在。源码来源是Python Cookbook,2nd Edition

不知道为何处语法错误,Python2/3在这里有区别么?或者您在flash中试试看?我在Python2.7桌面版里一直这么用。

使用的时候,

import const

const.myconst = 3.1415926

我会切到Python3和uPython中看一看。

点评

可能是MicroPython本身的问题。  详情 回复 发表于 2016-5-6 12:20
 
 
 

回复

1万

帖子

25

TA的资源

版主

5
 
allankliu 发表于 2016-5-6 12:08
这个一般作为一个内部类存在。源码来源是Python Cookbook,2nd Edition

不知道为何处语法错误,Python2/ ...

可能是MicroPython本身的问题。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表