我正在监视一个外部设备,当条件不满足时输出一个布尔值为False,当条件满足时,布尔值为True。 问题是,满足条件后,布尔值会多次输出。如何在python中布尔值更改时执行一次函数?
这是输出的样子:
False
False
False
False
True
True
False
False
False
所以我想什么,能够做的就是监控此值,并执行一个简单的功能,只有一次,每次从假到布尔变化真正。我已经看到其他语言具有简单的“变化”功能,所以我知道它可能并且可能比我更容易做到。
目前我有这个。为了解释这一点,变量“ext_data”被用作python脚本正在监视的外部数据。
while True:
if ext_data == True:
print("true")
pass
这将打印“真”每一次布尔等于真实的,当它重置本身的布尔仍设置为True,所以我得到多个读数时,我只想要一个。
感谢任何人的帮助!
编辑:使用holdenweb写的EdgeDetector类
更新后的代码。
ext_data = True/False # This returns True or False depending on the state
# of the variable. It is constantly monitored and
# could change at any moment, which is why I'm
# running the function in a while True loop
def printer():
print(u'something%s' % serialport.cts)
post_to_api('cycle_count')
def myfunction():
return ext_data
test_subject = EdgeDetector(myfunction, printer)
while True:
test_subject.test()
这仍然返回偶尔重复的帖子。有人提到这个数据需要放在一个数组中才能使EdgeDetector类正常工作,你会如何建议将这些数据放入一个数组而不创建一个无限长的数组?
据我知道,谁提到存储在数组中的数据的唯一的人(名单,其实)是你。当你说它“返回重复的帖子”时,你如何确定?他们的问题的事实是,除非有一个bug(总是可能的),这是不可能的,除非已经有高到低的转换第一(因为技术上我真的应该把它称为RisingEdgeDetector的代码来检测的边缘,但这种假设了解信号的极性)。既然你在投票,你可能会错过短暂的脉冲。如果执行不output_from_device': – holdenweb