检查位值的Python方法

2024-06-16 16:33:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这组常量声明

    self.POUTPUT = 1
    self.PPWM = 2
    self.PINPUT = 4
    self.PUNUSED = 8
    self.PSONAR = 16
    self.PULTRA = 32
    self.PSERVOD = 64
    self.PSTEPPER = 128
    self.PCOUNT = 256
    self.PINPUTDOWN = 512
    self.PINPUTNONE = 1024

什么是python检查值是否匹配任何输入状态(4512和1024)的方法? 附加信息:我通常只在简单的语言中使用位模式检查,但我想知道在Python中是否有更好的方法:) 基本上,每个管脚可以有上述的一种输入/输出状态,但如果一个管脚是输入值中的任何一个,则会发生一个动作 e、 g如果pin==4或512或1024->;执行某些操作


Tags: 方法self声明状态管脚常量pcountpinput
2条回答

最好使用set来测试集合成员资格(您似乎正在做的事情)。在

self.input_states = {self.PINPUT, self.PINPUTDOWN, self.PINPUTNONE}

# later
if value in self.input_states:
    do_something()

当然,你可以用各种基本相同的方法来处理这个问题,但是无论如何,你必须对这些神奇数字中的哪些是“输入状态”进行编码。在


现在,如果如前所述,您实际想要的是基于是否设置了某个位来做一些位屏蔽或测试,那么您需要看看Python bitwise operators。特别是,要查看一个值是否等于其中一个值,可以使用按位and,在Python中用&表示。Joran's answer很好地涵盖了这种用法,但基本思想是:

^{pr2}$

或者如果所有这些输入值都触发相同的操作:

if any(value & p for p in (self.PINPUT, self.PINPUTDOWN, self.PINPUTNONE)):
    do_something()
if SOME_DATA & self.PINPUTNONE:  # do somethign

是人们通常是怎么做的

检查很多

^{pr2}$

相关问题 更多 >