所以我'使用重复功能重复调用一次函数n次:
def repeat_function(sleep_time, times, expected_result, function, *args):
for i in range(times):
time_to_sleep = sleep_time/times
sleep(time_to_sleep)
result = function(*args)
if result == expected_result:
break
return result
这可以作为polling
机制,在收到expected_result
之前不断调用函数。
现在我需要使用相同的函数(如果需要修改)来检查函数的结果是否也是not None
类似的东西:
repeat_function(4, 4, not None, func)
问题显然是if result == expected_result
,我无法将not None
用作expected_result
将重复函数修改为if result == expected_result or result is expected_result
似乎也不符合逻辑(可能有副作用)。
有没有办法使用
not None
运算符检查方法的返回是否为==
?
对于如何解决问题的任何建议表示赞赏。
答案 0 :(得分:3)
传递一个检查预期结果的函数:
def repeat_function(sleep_time, times, is_expected_result, function, *args):
for i in range(times):
time_to_sleep = sleep_time/times
sleep(time_to_sleep)
result = function(*args)
if is_expected_result(result):
break
return result
这样称呼:
repeat_function(4, 4, lambda x: x != None, func)
repeat_function(4, 4, lambda x: x == "expected_result", func)
repeat_function(4, 4, lambda x: x == 1234, func)
答案 1 :(得分:0)
好的,这是另一个去吧。我的解决方案是在你的函数中定义一个类:
var myBtn = UIButton()
myBtn.isEnabled = true
这是class bool_check:
def __init__(self, value):
self.value = value
def __eq__(self, value):
if self.value or self.value == value:
return True
else:
return False
对象与另一个值相比会返回的内容。这绝不包括所有实例,但具体涵盖了您的问题。
bool_check
您看到的是,当您比较>>> t = bool_check(2)
>>> t == 2
True
>>> f = bool_check(None)
>>> f == True
False
>>> f = bool_check(False)
>>> f == True
False
>>> f == False
True
时,您会得到bool_check(None) == True
,这就是您想要的。当您比较False
时,您会得到bool_check(2) == True
,这也是您想要的。
以下是如何使用的:
True
如果您将def repeat_function(sleep_time, times, expected_result, function, *args):
for i in range(times):
time_to_sleep = sleep_time/times
sleep(time_to_sleep)
result = function(*args)
if bool_check(result) == expected_result:
break
return result
传递给True
,那么如果expected_result
返回function(*args)
,则检查会解析为None
并且不会中断。如果它返回了某些内容,那么False
类的__eq__
方法将返回bool_check
。
这将满足您的需求(我认为),但不会涵盖所有可能性。
答案 2 :(得分:0)
您可以传递python函数或使用lambda表达式,下面是使用后者的示例:
def repeat_function(sleep_time, times, eval_result, function, *args):
for i in range(times):
time_to_sleep = sleep_time/times
sleep(time_to_sleep)
result = function(*args)
if eval_result(result):
break
return result
eval_result = lambda result: result is not None
eval_result = lambda result: result == 4